Big gui update:
authoroliskoli <oliskoli@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Sun, 20 Nov 2005 21:21:30 +0000 (21:21 +0000)
committeroliskoli <oliskoli@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Sun, 20 Nov 2005 21:21:30 +0000 (21:21 +0000)
- new dialog for format options
- added CET features
- added possibility to write data to screen
- any "look and feel" changes

15 files changed:
gpsbabel/win32/gui-2/GPSBabelGUI.dof
gpsbabel/win32/gui-2/GPSBabelGUI.dpr
gpsbabel/win32/gui-2/GPSBabelGUI.res
gpsbabel/win32/gui-2/about.dfm
gpsbabel/win32/gui-2/about.pas
gpsbabel/win32/gui-2/common.pas
gpsbabel/win32/gui-2/filter.dfm
gpsbabel/win32/gui-2/filter.pas
gpsbabel/win32/gui-2/locale/de/LC_MESSAGES/default.po
gpsbabel/win32/gui-2/locale/fr/LC_MESSAGES/default.po
gpsbabel/win32/gui-2/main.dfm
gpsbabel/win32/gui-2/main.pas
gpsbabel/win32/gui-2/readme.dfm
gpsbabel/win32/gui-2/readme.pas
gpsbabel/win32/gui-2/utils.pas

index a470b1fb645e4ba97c7a2bbf6a6d38e40323eddf..3c4b21a3204c768d722c2588dff2afc13f05c8df 100644 (file)
@@ -56,10 +56,10 @@ IncludeVerInfo=1
 AutoIncBuild=0\r
 MajorVer=0\r
 MinorVer=2\r
-Release=1\r
-Build=6\r
-Debug=0\r
-PreRelease=1\r
+Release=2\r
+Build=11\r
+Debug=1\r
+PreRelease=0\r
 Special=0\r
 Private=0\r
 DLL=0\r
@@ -68,17 +68,11 @@ CodePage=1252
 [Version Info Keys]\r
 CompanyName=GPSBabel Makers\r
 FileDescription=GPSBabel Windows Frontend\r
-FileVersion=0.2.1.6\r
+FileVersion=0.2.2.11\r
 InternalName=GPSBabelGUI-2\r
 LegalCopyright=(C) 2005 Olaf Klein (O.B.Klein@T-Online.de)\r
 LegalTrademarks=\r
 OriginalFilename=GPSBabelGUI.exe\r
 ProductName=GPSBabel\r
-ProductVersion=1.2.8-beta11012005\r
-Comments=\r
-[HistoryLists\hlConditionals]\r
-Count=1\r
-Item0=MSWINDOWS\r
-[HistoryLists\hlUnitAliases]\r
-Count=1\r
-Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;\r
+ProductVersion=1.2.8-beta11102005\r
+Comments=internal test build\r
index c9546bee868cf545254713f04c1f2dc903b47fd3..dd78f1bdef0349070b8877f7060789acc926d163 100644 (file)
@@ -19,7 +19,6 @@ program GPSBabelGUI;
 \r
 uses\r
   gnugettext in 'gnugettext.pas',\r
-  gnugettextD4 in 'gnugettextD4.pas',\r
   Windows,\r
   SysUtils,\r
   classes,\r
@@ -29,19 +28,24 @@ uses
   common in 'common.pas',\r
   filter in 'filter.pas' {frmFilter},\r
   about in 'about.pas' {frmAbout},\r
-  readme in 'readme.pas' {frmReadme};\r
+  readme in 'readme.pas' {frmReadme},\r
+  options in 'options.pas' {frmOptions};\r
 \r
 {$R *.RES}\r
 \r
+var\r
+  lang: string;\r
+\r
 begin\r
   AddDomainForResourceString('delphi');\r
-\r
+  lang := ReadProfile('Global:Language', '');\r
+  if (lang <> '') then\r
+    UseLanguage(lang);\r
+{$IFOPT D+}\r
 //  UseLanguage('fr');                 // for testing\r
-\r
+{$ENDIF}\r
   Application.Initialize;\r
   Application.CreateForm(TfrmMain, frmMain);\r
   Application.CreateForm(TfrmReadme, frmReadme);\r
-  Application.CreateForm(TfrmFilter, frmFilter);\r
-  Application.CreateForm(TfrmAbout, frmAbout);\r
   Application.Run;\r
 end.\r
index 2c8be76a22fb91c1bf9b539030c1a70835fe2f98..cb0bb8b0a18900beaf4d3777e0860c7718ddc6d3 100644 (file)
Binary files a/gpsbabel/win32/gui-2/GPSBabelGUI.res and b/gpsbabel/win32/gui-2/GPSBabelGUI.res differ
index 0a5109390c55091616508d5ed4273e67c42c9571..fb5bc04878fbf0189aaa28bd6542a2d23bad0aed 100644 (file)
Binary files a/gpsbabel/win32/gui-2/about.dfm and b/gpsbabel/win32/gui-2/about.dfm differ
index fa04d95d5fc2f034e77ca4c63a4bc8679fa113c4..a92dba09053eb4c6160c2782ca8cb39876c9fc5b 100644 (file)
@@ -21,9 +21,9 @@ unit about;
 interface\r
 \r
 uses\r
-  gnugettextD4,\r
+  gnugettextDx,\r
   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,\r
-  StdCtrls, Buttons, ExtCtrls, ShellApi,\r
+  StdCtrls, Buttons, ExtCtrls, \r
   common;\r
 \r
 type\r
@@ -43,12 +43,16 @@ type
     lbCopyRight: TLabel;\r
     lbMoreInfo: TLabel;\r
     lbSFURL: TLabel;\r
+    btnNewLanguage: TButton;\r
     procedure FormCreate(Sender: TObject);\r
     procedure lbURLMouseMove(Sender: TObject; Shift: TShiftState; X,\r
       Y: Integer);\r
     procedure pnCenterMouseMove(Sender: TObject; Shift: TShiftState; X,\r
       Y: Integer);\r
     procedure lbURLClick(Sender: TObject);\r
+    procedure FormKeyDown(Sender: TObject; var Key: Word;\r
+      Shift: TShiftState);\r
+    procedure btnNewLanguageClick(Sender: TObject);\r
   private\r
     { Private declarations }\r
     FTitle: string;\r
@@ -69,7 +73,7 @@ uses
 \r
 procedure TfrmAbout.FormCreate(Sender: TObject);\r
 begin\r
-  gnugettextD4.TranslateComponent(SELF);\r
+  TranslateComponent(SELF);\r
   FTitle := Caption;\r
   Caption := FTitle + ' ' + SGPSBabelTitle;\r
 \r
@@ -82,6 +86,7 @@ begin
 \r
   lbxTranslators.Items.Add(_('German by Olaf Klein'));\r
   lbxTranslators.Items.Add(_('French by Lilian Morinon'));\r
+\r
 end;\r
 \r
 procedure TfrmAbout.lbURLMouseMove(Sender: TObject; Shift: TShiftState; X,\r
@@ -106,12 +111,26 @@ begin
 end;\r
 \r
 procedure TfrmAbout.lbURLClick(Sender: TObject);\r
-var\r
-  url: string;\r
 begin\r
   TLabel(Sender).Font.Color := clBlue;\r
-  url := 'http://' + TLabel(Sender).Caption;\r
-  ShellExecute(Self.Handle, 'open', PChar(url), nil, '', 0);\r
+  WinOpenFile('http://' + TLabel(Sender).Caption);\r
+end;\r
+\r
+procedure TfrmAbout.FormKeyDown(Sender: TObject; var Key: Word;\r
+  Shift: TShiftState);\r
+begin\r
+  if (Key = 27) then\r
+    ModalResult := mrOK;\r
+end;\r
+\r
+procedure TfrmAbout.btnNewLanguageClick(Sender: TObject);\r
+begin\r
+  ShowMessage(\r
+  _('Please have a look at the file README.GUI.'#13#10#10 +\r
+  'There you will find all information you need to'#13#10 +\r
+  'get GPSBabelGUI working in your own language.')\r
+ );\r
 end;\r
 \r
 end.\r
\ No newline at end of file
index 8d29e63688268a0559f469ebe2e9869f9baad341..185789742ea7e0a13db0990cb574617d5719cd54 100644 (file)
@@ -21,18 +21,27 @@ unit common;
 interface\r
 \r
 uses\r
-  Windows, SysUtils, Classes, Messages;\r
+  Windows, SysUtils, Classes, Messages, Controls, StdCtrls;\r
 \r
+const\r
+  OTypes: array[0..6] of PChar =\r
+    ('unknown', 'integer', 'float', 'string', 'boolean', 'file', 'outfile');\r
+    \r
 resourcestring\r
   SGPSBabelURL = 'http://www.gpsbabel.org';\r
   SGPSBabelTitle = 'GPSBabelGUI-2';\r
 \r
 var\r
+  gpsbabel_exe: string;\r
+  gpsbabel_version: string;        // 1.101.010-beta...\r
+  gpsbabel_vfmt: string;           // 001.101.010\r
+  gpsbabel_minor, gpsbabel_major, gpsbabel_release: Integer;\r
   SGPSBabelGUIVersion: string;\r
   CFixedFileinfo: TVSFixedFileInfo;\r
 \r
 const\r
   WM_STARTUP = WM_USER + 1;\r
+  WM_OPTIONS_CHANGED = WM_USER + 2;\r
 \r
 const\r
   SREG_TARGET_DIR = 'Target:Directory';\r
@@ -74,6 +83,37 @@ type
   end;\r
 \r
 type\r
+  TOption = record\r
+    format: string;\r
+    name:   string;\r
+    hint:   string;\r
+    otype:  Byte;\r
+    def:    PChar;\r
+    min:    PChar;\r
+    max:    PChar;\r
+    chb:    TCheckBox;\r
+    edit:   TControl;\r
+  end;\r
+  POption = ^TOption;\r
+\r
+type\r
+  TCapabilities = class;\r
+  \r
+  TOptions = class(TStringList)\r
+  private\r
+    FCaps: TCapabilities;\r
+    procedure SetList(const Value: TStrings);\r
+  protected\r
+  public\r
+    constructor Create(ACapabilities: TCapabilities);\r
+    procedure AddOptionLine(const ALine: string);\r
+    procedure DebugGetHints(List: TStringList);\r
+    function FormatOpts(const Descr: string): TStringList;\r
+    function HasFormatOpts(const Format: string): Boolean;\r
+  property\r
+    List: TStrings write SetList;\r
+  end;\r
+\r
   TCapabilities = class(TStringList)\r
   private\r
     FList: TStrings;\r
@@ -96,11 +136,189 @@ type
 type\r
   eGPSBabelError = class(Exception);\r
 \r
-var\r
-  gpsbabel_exe: string;\r
+function atoi(str: PChar): Integer;\r
 \r
 implementation\r
 \r
+function atoi(str: PChar): Integer;\r
+begin\r
+  Result := 0;\r
+  while (str^ <> #0) do\r
+  begin\r
+    if ((str^ < '0') or (str^ > '9')) then Break;\r
+    Result := (Result * 10) + (Ord(str^) - Ord('0'));\r
+    str := str + 1;\r
+  end;\r
+end;\r
+\r
+function GetFileVersion(const Filename: string): string;\r
+var\r
+  buff: PChar;\r
+  hdl: DWORD;\r
+  len: DWORD;\r
+  sub: PChar;\r
+  sublen: UINT;\r
+  fix: PVSFixedFileInfo;\r
+  i:   Integer;\r
+begin\r
+  Result := '?.?';\r
+\r
+  FillChar(CFixedFileinfo, SizeOf(CFixedFileinfo), #0);\r
+\r
+  len := GetFileVersionInfoSize(PChar(Filename), hdl);\r
+  if not(len > 0) then exit;\r
+\r
+  GetMem(buff, len);\r
+  try\r
+\r
+    if not GetFileVersionInfo(PChar(FileName), 0, len, buff) then Exit;\r
+\r
+    fix := Pointer(buff);\r
+    i := len - SizeOf(fix^);\r
+    while (i > 0) do\r
+    begin\r
+      Dec(i);\r
+      if (fix.dwSignature = $feef04bd) then\r
+      begin\r
+        CFixedFileinfo := fix^;\r
+        Break;\r
+      end;\r
+      PChar(fix) := PChar(fix) + 1; \r
+    end;\r
+\r
+    if not VerQueryValue(buff, PChar('\\StringFileInfo\\040904E4\\FileVersion'),\r
+      Pointer(sub), sublen) then Exit;\r
+    if not(sublen > 0) then Exit;\r
+    Result := string(sub);\r
+  finally\r
+    FreeMem(buff);\r
+  end;\r
+end;\r
+\r
+{ TOptions }\r
+\r
+constructor TOptions.Create(ACapabilities: TCapabilities);\r
+begin\r
+  inherited Create;\r
+  FCaps := ACapabilities;\r
+  Sorted := False;\r
+end;\r
+\r
+procedure TOptions.AddOptionLine(const ALine: string);\r
+var\r
+  buff: array[0..1023] of Char;\r
+  cin, cend: PChar;\r
+  index: Integer;\r
+  opt: POption;\r
+  list: TStringList;\r
+  i: Integer;\r
+begin\r
+  StrPCopy(buff, ALine);\r
+  StrCat(buff, #9);\r
+\r
+  cin := @buff;\r
+  index := 0;\r
+  while (true) do\r
+  begin\r
+    cend := StrScan(cin, #9);\r
+    if (cend = nil) then break;\r
+    cend^ := #0;\r
+\r
+    case index of\r
+      0:\r
+        if (StrIComp(cin, 'option') <> 0) then\r
+          Exit else\r
+        begin\r
+          New(opt);\r
+          FillChar(opt^, SizeOf(opt^), #0);\r
+        end;\r
+      1:\r
+        opt.format := string(cin);\r
+      2:\r
+        opt.name := string(cin);\r
+      3:\r
+        opt.hint := string(cin);\r
+      4:\r
+        for i := 0 to high(OTypes) do\r
+          if (StrIComp(cin, OTypes[i]) = 0) then\r
+          begin\r
+            opt.otype := i;\r
+            Break;\r
+          end;\r
+      5:\r
+        if (cin^ <> #0) then\r
+          opt.def := StrNew(cin);\r
+      6:\r
+        if (cin^ <> #0) then\r
+          opt.min := StrNew(cin);\r
+      7:\r
+        if (cin^ <> #0) then\r
+          opt.max := StrNew(cin);\r
+    end;\r
+    \r
+    index := index + 1;\r
+    cin := cend + 1;\r
+  end;\r
+\r
+  index := Self.IndexOf(opt.format);\r
+  if (index >= 0) then\r
+    list := TStringList(Self.Objects[index])\r
+  else begin\r
+    list := TStringList.Create;\r
+    list.Sorted := True;\r
+    Self.AddObject(opt.format, list);\r
+  end;\r
+  list.AddObject(opt.name, Pointer(opt));\r
+end;\r
+\r
+procedure TOptions.DebugGetHints(List: TStringList);\r
+var\r
+  i, j, k: Integer;\r
+  l: TStrings;\r
+  o: POption;\r
+begin\r
+  List.Clear;\r
+  List.Sorted := True;\r
+  for i := 0 to Count - 1 do\r
+  begin\r
+    l := Pointer(Objects[i]);\r
+    for j := 0 to l.Count - 1 do\r
+    begin\r
+      o := Pointer(l.Objects[j]);\r
+      k := List.IndexOf(o.hint);\r
+      if (k < 0) then\r
+        List.Add(o.hint);\r
+    end;\r
+  end;\r
+end;\r
+\r
+function TOptions.FormatOpts(const Descr: string): TStringList;\r
+var\r
+  i: Integer;\r
+  s: string;\r
+begin\r
+  s := FCaps.GetName(Descr);\r
+  if (s <> '') and Self.Find(s, i) then\r
+    Result := TStringList(Self.Objects[i])\r
+  else\r
+    Result := nil;\r
+end;\r
+\r
+function TOptions.HasFormatOpts(const Format: string): Boolean;\r
+begin\r
+  Result := (FormatOpts(Format) <> nil);\r
+end;\r
+\r
+procedure TOptions.SetList(const Value: TStrings);\r
+var\r
+  i: Integer;\r
+begin\r
+  Clear;\r
+  for i := 0 to Value.Count - 1 do\r
+    AddOptionLine(Value[i]);\r
+  Sorted := True;\r
+end;\r
+\r
 { TCapabilities }\r
 \r
 procedure TCapabilities.AddFormat(const Line: string);\r
@@ -115,7 +333,7 @@ var
   comment: string;\r
   name: string;\r
   internal: string;\r
-  \r
+\r
   caps: Integer;\r
 \r
   info: PFileInfo;\r
@@ -134,10 +352,17 @@ begin
     cend^ := #0;\r
 \r
     case index of\r
-      0: internal := StrPas(cin);\r
-      1: scaps := StrPas(cin);\r
-      2: name := StrPas(cin);\r
-      3: ext := StrPas(cin);\r
+      0:\r
+        if (StrIComp(cin, 'option') = 0) then\r
+          Exit\r
+        else\r
+          internal := StrPas(cin);\r
+      1:\r
+        scaps := StrPas(cin);\r
+      2:\r
+          name := StrPas(cin);\r
+      3:\r
+        ext := StrPas(cin);\r
     else\r
       begin\r
         comment := StrPas(cin);\r
@@ -275,50 +500,6 @@ begin
   end;\r
 end;\r
 \r
-function GetFileVersion(const Filename: string): string;\r
-var\r
-  buff: PChar;\r
-  hdl: DWORD;\r
-  len: DWORD;\r
-  sub: PChar;\r
-  sublen: UINT;\r
-  fix: PVSFixedFileInfo;\r
-  i:   Integer;\r
-begin\r
-  Result := '?.?';\r
-\r
-  FillChar(CFixedFileinfo, SizeOf(CFixedFileinfo), #0);\r
-\r
-  len := GetFileVersionInfoSize(PChar(Filename), hdl);\r
-  if not(len > 0) then exit;\r
-\r
-  GetMem(buff, len);\r
-  try\r
-\r
-    if not GetFileVersionInfo(PChar(FileName), 0, len, buff) then Exit;\r
-\r
-    fix := Pointer(buff);\r
-    i := len - SizeOf(fix^);\r
-    while (i > 0) do\r
-    begin\r
-      Dec(i);\r
-      if (fix.dwSignature = $feef04bd) then\r
-      begin\r
-        CFixedFileinfo := fix^;\r
-        Break;\r
-      end;\r
-      PChar(fix) := PChar(fix) + 1; \r
-    end;\r
-\r
-    if not VerQueryValue(buff, PChar('\\StringFileInfo\\040904E4\\FileVersion'),\r
-      Pointer(sub), sublen) then Exit;\r
-    if not(sublen > 0) then Exit;\r
-    Result := string(sub);\r
-  finally\r
-    FreeMem(buff);\r
-  end;\r
-end;\r
-  \r
 initialization\r
 \r
   gpsbabel_exe := SysUtils.ExtractFilePath(ParamStr(0)) + 'gpsbabel.exe';\r
index 85071d6725adf71113802855f4a59638d8013883..8c836e9dc44cc33a7a11b5e8caa3fc1f15405604 100644 (file)
Binary files a/gpsbabel/win32/gui-2/filter.dfm and b/gpsbabel/win32/gui-2/filter.dfm differ
index 436eb4712ba68f7aa4415fb175ee3d67455e6030..1e75bec04c1fdfa2e805d2e05e31007adfdbb5a2 100644 (file)
@@ -21,9 +21,10 @@ unit filter;
 interface\r
 \r
 uses\r
-  gnugettextD4,\r
+  gnugettextDx,\r
   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,\r
-  StdCtrls, ComCtrls, Buttons, Mask, ExtCtrls;\r
+  StdCtrls, ComCtrls, Buttons, Mask, ExtCtrls,\r
+  common;\r
 \r
 type\r
   TfrmFilter = class(TForm)\r
@@ -94,10 +95,13 @@ type
     procedure cbWayptRadiusClick(Sender: TObject);\r
     procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);\r
     procedure FormShow(Sender: TObject);\r
+    procedure FormKeyDown(Sender: TObject; var Key: Word;\r
+      Shift: TShiftState);\r
   private\r
     { Private-Deklarationen }\r
     lTrackTimeList: TList;\r
     FTracksEnabled: Boolean;\r
+    FInitialValues: string;\r
     function AnyChecked(Control: TWinControl): Boolean;\r
     procedure EnableList(List: TList; Enable: Boolean = True);\r
     procedure SetTracksEnabled(const Value: Boolean);\r
@@ -127,67 +131,34 @@ begin
     AControl.Left := AControl.Left + 4;\r
 end;\r
 \r
-function TfrmFilter.ValidateNumerical(AEdit: TCustomEdit; AMin, AMax: Extended): Boolean;\r
-var\r
-  s: string;\r
-  v: Extended;\r
-begin\r
-  Result := True;\r
-  if not(AEdit.Enabled) then Exit;\r
-  if (ModalResult <> mrOK)  then Exit;\r
-\r
-  Result := False;\r
-  s := Trim(AEdit.Text);\r
-  if (s = '') then s := '0';\r
-  while (Pos(',', s) <> 0) do\r
-    s[Pos(',', s)] := '.';\r
-\r
-  AEdit.Text := s;\r
-\r
-  try\r
-    v := SysUtils.StrToFloat(s);\r
-  except\r
-    on E: EConvertError do\r
-    begin\r
-      AEdit.SetFocus;\r
-      raise;\r
-    end;\r
-  end;\r
-\r
-  if (v < AMin) or (v > AMax) then\r
-  begin\r
-    AEdit.SetFocus;\r
-    raise eOutOfRange.CreateFmt(_('Value (%s) out of range (%g to %g)!'),\r
-      [s, AMin, AMax]);\r
-  end;\r
-  Result := True;\r
-end;\r
-\r
-procedure TfrmFilter.cbTrackTimeClick(Sender: TObject);\r
-begin\r
-  EnableList(lTrackTimeList, cbTrackTime.Checked);\r
-end;\r
-\r
-procedure TfrmFilter.EnableList(List: TList; Enable: Boolean);\r
+procedure EnableAll(Parent: TWinControl; Enable: Boolean);\r
 var\r
   i: Integer;\r
-  o: TObject;\r
+  c: TComponent;\r
+  master: TComponent;\r
+  ctrl: TControl;\r
 begin\r
-  for i := 0 to List.Count - 1 do\r
+  if (Parent = nil) then Exit;\r
+  master := Parent.Owner;\r
+  if (master = nil) then Exit;\r
+  for i := 0 to master.ComponentCount - 1 do\r
   begin\r
-    o := Pointer(List.Items[i]);\r
-    if (o is TControl) then\r
-      with o as TControl do\r
-        Enabled := Enable;\r
+    c := master.Components[i];\r
+    if not(c.InheritsFrom(TControl)) then Continue;\r
+    ctrl := Pointer(c);\r
+    if not(ctrl.Parent = Parent) then Continue;\r
+    ctrl.Enabled := Enable;\r
   end;\r
 end;\r
 \r
+{ TfrmFilter }\r
+\r
 procedure TfrmFilter.FormCreate(Sender: TObject);\r
 var\r
   CurrentTime: TDateTime;\r
 \r
 begin\r
-  gnugettextD4.TranslateComponent(SELF);\r
+  TranslateComponent(SELF);\r
 \r
   CurrentTime := SysUtils.Now;\r
   dtpTrackStartDate.DateTime := Int(CurrentTime);\r
@@ -234,6 +205,71 @@ begin
   cobWayptRadius.ItemIndex := 0;\r
 \r
   dtpTrackStopTime.Time := 1 - (1.0 / (24*60*60));\r
+\r
+  // Enable/Disable depending on gpsbabel.exe version\r
+\r
+  if (common.gpsbabel_vfmt < '001.002.007') then\r
+  begin\r
+    EnableAll(gbTracks, False);\r
+    gbTracks.Hint := Format(_('Not supported by gpsbabel.exe, release %s!'), [\r
+      gpsbabel_version]);\r
+    gbTracks.ShowHint := True;\r
+  end;\r
+end;\r
+\r
+function TfrmFilter.ValidateNumerical(AEdit: TCustomEdit; AMin, AMax: Extended): Boolean;\r
+var\r
+  s: string;\r
+  v: Extended;\r
+begin\r
+  Result := True;\r
+  if not(AEdit.Enabled) then Exit;\r
+  if (ModalResult <> mrOK)  then Exit;\r
+\r
+  Result := False;\r
+  s := Trim(AEdit.Text);\r
+  if (s = '') then s := '0';\r
+  while (Pos(',', s) <> 0) do\r
+    s[Pos(',', s)] := '.';\r
+\r
+  AEdit.Text := s;\r
+\r
+  try\r
+    v := SysUtils.StrToFloat(s);\r
+  except\r
+    on E: EConvertError do\r
+    begin\r
+      AEdit.SetFocus;\r
+      raise;\r
+    end;\r
+  end;\r
+\r
+  if (v < AMin) or (v > AMax) then\r
+  begin\r
+    AEdit.SetFocus;\r
+    raise eOutOfRange.CreateFmt(_('Value (%s) out of range (%g to %g)!'),\r
+      [s, AMin, AMax]);\r
+  end;\r
+  Result := True;\r
+end;\r
+\r
+procedure TfrmFilter.cbTrackTimeClick(Sender: TObject);\r
+begin\r
+  EnableList(lTrackTimeList, cbTrackTime.Checked);\r
+end;\r
+\r
+procedure TfrmFilter.EnableList(List: TList; Enable: Boolean);\r
+var\r
+  i: Integer;\r
+  o: TObject;\r
+begin\r
+  for i := 0 to List.Count - 1 do\r
+  begin\r
+    o := Pointer(List.Items[i]);\r
+    if (o is TControl) then\r
+      with o as TControl do\r
+        Enabled := Enable;\r
+  end;\r
 end;\r
 \r
 procedure TfrmFilter.cbTrackTitleClick(Sender: TObject);\r
@@ -457,6 +493,7 @@ end;
 procedure TfrmFilter.FormShow(Sender: TObject);\r
 begin\r
   ChangeCheckBoxesChecked(Self);\r
+  FInitialValues := CmdLine;\r
 end;\r
 \r
 procedure TfrmFilter.ChangeCheckBoxesChecked(AComponent: TComponent; Restore: Boolean = False);\r
@@ -479,4 +516,21 @@ begin
   end;\r
 end;\r
 \r
+procedure TfrmFilter.FormKeyDown(Sender: TObject; var Key: Word;\r
+  Shift: TShiftState);\r
+var\r
+  str: string;\r
+begin\r
+  if (Key <> 27) then Exit;\r
+\r
+\r
+  str := Self.CmdLine;\r
+  if (str <> FInitialValues) then\r
+  begin\r
+    if not(MessageDlg(_('Discard changes?'), mtWarning, mbOKCancel, 0) = mrOK) then\r
+      Exit;\r
+  end;\r
+  ModalResult := mrCancel;\r
+end;\r
+\r
 end.\r
index f0f28fbe88f9f497a1e9c432aba7c2160cc802e0..16e5a4325cac074a71b7b621a3369dad8fabc205 100644 (file)
@@ -3,7 +3,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GPSBabel 1.2.7\n"
 "POT-Creation-Date: 2005-08-12 14:50\n"
-"PO-Revision-Date: 2005-10-29 01:00+0100\n"
+"PO-Revision-Date: 2005-11-20 21:14+0100\n"
 "Last-Translator: Olaf Klein <o.b.klein@t-online.de>\n"
 "Language-Team:  <O.B.Klein@T-Online.de>\n"
 "MIME-Version: 1.0\n"
@@ -11,875 +11,773 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "X-Generator: dxgettext 1.2\n"
 "X-Poedit-Language: German\n"
-"X-Poedit-Country: GERMANY\n"
 
-#. frmAbout..Caption
 #. frmAbout..Caption
 #: about.dfm:5
-#: test/about.dfm:5
 msgid "About"
 msgstr "Über"
 
 #. frmAbout..pnClient..pnCenter..lbHint1..Caption
-#. frmAbout..pnClient..pnCenter..lbHint1..Caption
-#: about.dfm:74
-#: test/about.dfm:74
+#: about.dfm:76
 msgid "This program is part of the GPSBabel project, hosted on"
 msgstr "Dieses Programm ist Bestandteil des Projektes \"GPSBabel\", zu finden auf"
 
 #. frmAbout..pnClient..pnCenter..lbVersion..Caption
-#. frmAbout..pnClient..pnCenter..lbVersion..Caption
-#: about.dfm:82
-#: test/about.dfm:82
-msgid "Version 0.2"
-msgstr "Version 0.2"
+#: about.dfm:84
+#: about.pas:80
+msgid "Version"
+msgstr "Version"
 
 #. frmAbout..pnClient..pnCenter..lbTranslators..Caption
-#. frmAbout..pnClient..pnCenter..lbTranslators..Caption
-#: about.dfm:89
-#: test/about.dfm:89
+#: about.dfm:91
 msgid "Translations"
-msgstr "Übersetzung"
+msgstr "Übersetzungen"
 
 #. frmAbout..pnClient..pnCenter..lbURL..Caption
-#. frmAbout..pnClient..pnCenter..lbURL..Caption
-#: about.dfm:96
-#: test/about.dfm:96
+#: about.dfm:98
 msgid "www.gpsbabel.org"
 msgstr "www.gpsbabel.org"
 
 #. frmAbout..pnClient..pnCenter..lbCopyRight..Caption
-#. frmAbout..pnClient..pnCenter..lbCopyRight..Caption
-#: about.dfm:112
-#: test/about.dfm:112
+#: about.dfm:114
 msgid "Copyright (C) 2005 Olaf Klein (O.B.Klein@T-Online.de)"
 msgstr "Copyright (C) 2005 Olaf Klein (O.B.Klein@T-Online.de)"
 
 #. frmAbout..pnClient..pnCenter..lbMoreInfo..Caption
-#. frmAbout..pnClient..pnCenter..lbMoreInfo..Caption
-#: about.dfm:119
-#: test/about.dfm:119
+#: about.dfm:121
 msgid "Find more info at"
 msgstr "Mehr Info's unter"
 
-#. frmAbout..pnClient..pnCenter..lbSFURL..Caption
-#. frmAbout..pnClient..pnCenter..lbSFURL..Caption
-#: about.dfm:126
-#: test/about.dfm:126
-msgid "SourceForge.net"
-msgstr "SourceForge.net"
-
-#. frmAbout..pnClient..pnCenter..stDescription..Caption
 #. frmAbout..pnClient..pnCenter..stDescription..Caption
-#: about.dfm:147
-#: test/about.dfm:147
+#: about.dfm:149
 msgid "The frontend for gpsbabel command line program"
 msgstr "Das Windows-Fontend für \"gpsbabel.exe\""
 
 #. frmAbout..pnClient..pnCenter..stLicense..Caption
-#. frmAbout..pnClient..pnCenter..stLicense..Caption
-#: about.dfm:161
-#: test/about.dfm:161
+#: about.dfm:163
 msgid "THIS SOFTWARE MAY ONLY BE LICENSED FREE OF CHARGE"
 msgstr "DIESE SOFTWARE KANN UND DARF NUR KOSTENLOS WEITERGEGEBEN WERDEN"
 
-#. frmFilter..Caption
+#. frmAbout..pnClient..pnCenter..btnNewLanguage..Caption
+#: about.dfm:192
+msgid "Adding a new language"
+msgstr "Eine neue Sprache hinzufügen"
+
 #. frmFilter..Caption
 #: filter.dfm:6
-#: test/filter.dfm:6
 msgid "Filter"
 msgstr "Filter"
 
 #. frmFilter..gbTracks..Caption
-#. frmMain..Panel2..cbTracks..Caption
-#. frmFilter..gbTracks..Caption
-#. frmMain..Panel2..cbTracks..Caption
-#: filter.dfm:29
-#: main.dfm:448
-#: test/filter.dfm:29
-#: test/main.dfm:428
+#. frmMain..pnBottom..cbTracks..Caption
+#: filter.dfm:31
+#: main.dfm:587
 msgid "&Tracks"
 msgstr "&Tracks"
 
 #. frmFilter..gbTracks..lbTimePlusMinus..Caption
-#. frmFilter..gbTracks..lbTimePlusMinus..Caption
-#: filter.dfm:37
-#: test/filter.dfm:37
+#: filter.dfm:39
 msgid "by"
 msgstr "um"
 
 #. frmFilter..gbTracks..lbTimeDays..Caption
-#. frmFilter..gbTracks..lbTimeDays..Caption
-#: filter.dfm:44
-#: test/filter.dfm:44
+#: filter.dfm:46
 msgid "day(s), "
 msgstr "Tag(e),"
 
 #. frmFilter..gbTracks..lbTimeHours..Caption
-#. frmFilter..gbTracks..lbTimeHours..Caption
-#: filter.dfm:51
-#: test/filter.dfm:51
+#: filter.dfm:53
 msgid "hour(s), "
 msgstr "Stunde(n),"
 
 #. frmFilter..gbTracks..lbTimeMinutes..Caption
-#. frmFilter..gbTracks..lbTimeMinutes..Caption
-#: filter.dfm:58
-#: test/filter.dfm:58
+#: filter.dfm:60
 msgid "minute(s),"
 msgstr "Minute(n),"
 
 #. frmFilter..gbTracks..lbTimeSeconds..Caption
-#. frmFilter..gbTracks..lbTimeSeconds..Caption
-#: filter.dfm:65
-#: test/filter.dfm:65
+#: filter.dfm:67
 msgid "second(s)"
 msgstr "Sekunde(n)"
 
 #. frmFilter..gbTracks..cbTrackTitle..Hint
-#. frmFilter..gbTracks..cbTrackTitle..Hint
-#: filter.dfm:72
-#: test/filter.dfm:72
+#: filter.dfm:74
 msgid "Title for new tracks"
 msgstr "Titel für neu erstellte Tracks"
 
 #. frmFilter..gbTracks..cbTrackTitle..Caption
-#. frmFilter..gbTracks..cbTrackTitle..Caption
-#: filter.dfm:74
-#: test/filter.dfm:74
+#: filter.dfm:76
 msgid "Tit&le"
 msgstr "Tite&l"
 
-#. frmFilter..gbTracks..edTrackTitle..Text
-#. frmFilter..gbTracks..edTrackTitle..Text
-#: filter.dfm:86
-#: test/filter.dfm:86
-msgid "ACTIVE LOG # %Y%m%d"
-msgstr "ACTIVE LOG # %Y%m%d"
-
 #. frmFilter..gbTracks..cbTrackSplit..Hint
-#. frmFilter..gbTracks..cbTrackSplit..Hint
-#: filter.dfm:93
-#: test/filter.dfm:93
+#: filter.dfm:95
 msgid "Split track into several tracks depending on date of trackpoint"
 msgstr "Erzeuge mehrere Tracks abhängig vom Datum der Trackpunkte"
 
 #. frmFilter..gbTracks..cbTrackSplit..Caption
-#. frmFilter..gbTracks..cbTrackSplit..Caption
-#: filter.dfm:94
-#: test/filter.dfm:94
+#: filter.dfm:96
 msgid "&Split"
 msgstr "&Splitten"
 
 #. frmFilter..gbTracks..cbTrackTime..Hint
-#. frmFilter..gbTracks..cbTrackTime..Hint
-#: filter.dfm:102
-#: test/filter.dfm:102
+#: filter.dfm:104
 msgid "Shift all tracks"
 msgstr "Tracks um ein Zeitintervall verschieben "
 
 #. frmFilter..gbTracks..cbTrackTime..Caption
-#. frmFilter..gbTracks..cbTrackTime..Caption
-#: filter.dfm:103
-#: test/filter.dfm:103
+#: filter.dfm:105
 msgid "&Move"
 msgstr "Verschieben"
 
 #. frmFilter..gbTracks..cbTrackStart..Hint
-#. frmFilter..gbTracks..cbTrackStart..Hint
-#: filter.dfm:195
-#: test/filter.dfm:195
+#: filter.dfm:197
 msgid "Take only trackpoints starting at"
 msgstr "beginne bei Zeitpunkt ..."
 
 #. frmFilter..gbTracks..cbTrackStart..Caption
-#. frmFilter..gbTracks..cbTrackStart..Caption
-#: filter.dfm:196
-#: test/filter.dfm:196
+#: filter.dfm:198
 msgid "Start at"
 msgstr "Beginnend am"
 
 #. frmFilter..gbTracks..cbTrackStop..Caption
-#. frmFilter..gbTracks..cbTrackStop..Caption
-#: filter.dfm:235
-#: test/filter.dfm:235
+#: filter.dfm:237
 msgid "stop at"
 msgstr "bis zum"
 
 #. frmFilter..gbTracks..cbTrackPack..Hint
-#. frmFilter..gbTracks..cbTrackPack..Hint
-#: filter.dfm:274
-#: test/filter.dfm:274
+#: filter.dfm:276
 msgid "Pack all tracks into one track (No duplicate timestamps)"
 msgstr "Alle Tracks zu einem einzigen zusammenfassen (doppelte Zeitstempel unzulässig)"
 
 #. frmFilter..gbTracks..cbTrackPack..Caption
-#. frmFilter..gbTracks..cbTrackPack..Caption
-#: filter.dfm:275
-#: test/filter.dfm:275
+#: filter.dfm:277
 msgid "&Pack (or)"
 msgstr "&Packen (oder)"
 
 #. frmFilter..gbTracks..cbTrackMerge..Hint
-#. frmFilter..gbTracks..cbTrackMerge..Hint
-#: filter.dfm:284
-#: test/filter.dfm:284
+#: filter.dfm:286
 msgid "Merge all tracks into one track"
 msgstr "Fasse alle Tracks zu einem einzigen zusammen (doppelte Zeitstempel werden verworfen)"
 
 #. frmFilter..gbTracks..cbTrackMerge..Caption
-#. frmFilter..gbTracks..cbTrackMerge..Caption
-#: filter.dfm:285
-#: test/filter.dfm:285
+#: filter.dfm:287
 msgid "Merge"
 msgstr "Zusammenführen"
 
 #. frmFilter..gbTracks..cbTrackRangeTimeZone..Hint
-#. frmFilter..gbTracks..cbTrackRangeTimeZone..Hint
-#: filter.dfm:294
-#: test/filter.dfm:294
+#: filter.dfm:296
 msgid "Shift start/stop by local timezone offset"
 msgstr "Verschiebe Beginn/Ende um Differenz zur lokalen Zeitzone"
 
 #. frmFilter..gbTracks..cbTrackRangeTimeZone..Caption
-#. frmFilter..gbTracks..cbTrackRangeTimeZone..Caption
-#: filter.dfm:295
-#: test/filter.dfm:295
+#: filter.dfm:297
 msgid "TZ"
 msgstr "\"TZ\""
 
 #. frmFilter..gbRoutes..Caption
-#. frmFilter..gbRoutes..Caption
-#: filter.dfm:306
-#: test/filter.dfm:306
+#: filter.dfm:308
 msgid "&Routes && Tracks"
 msgstr "&Routen && Tracks"
 
 #. frmFilter..gbRoutes..lbRouteSimplifyCount..Caption
-#. frmFilter..gbRoutes..lbRouteSimplifyCount..Caption
-#: filter.dfm:314
-#: test/filter.dfm:314
+#: filter.dfm:316
 msgid "limit to"
 msgstr "auf maximal"
 
 #. frmFilter..gbRoutes..lbRouteSimplifyText..Caption
-#. frmFilter..gbRoutes..lbRouteSimplifyText..Caption
-#: filter.dfm:322
-#: test/filter.dfm:322
+#: filter.dfm:324
 msgid "Points"
 msgstr "Punkte"
 
 #. frmFilter..gbRoutes..cbRouteSimplify..Hint
-#. frmFilter..gbRoutes..cbRouteSimplify..Hint
-#: filter.dfm:329
-#: test/filter.dfm:329
+#: filter.dfm:331
 msgid "Simplify routes and tracks by limited number of points"
 msgstr "Limitiert die Anzahl von Wegpunkten in Routen und Tracks"
 
 #. frmFilter..gbRoutes..cbRouteSimplify..Caption
-#. frmFilter..gbRoutes..cbRouteSimplify..Caption
-#: filter.dfm:330
-#: test/filter.dfm:330
+#: filter.dfm:332
 msgid "Simplify"
 msgstr "Vereinfachen"
 
 #. frmFilter..gbRoutes..edRoutesSimplifyMaxPoints..Hint
-#. frmFilter..gbRoutes..edRoutesSimplifyMaxPoints..Hint
-#: filter.dfm:339
-#: test/filter.dfm:339
+#: filter.dfm:341
 msgid "Upper limit of points for routes and tracks"
 msgstr "Maximale Anzahl an Punkten innerhalb von Routen und Tracks"
 
 #. frmFilter..gbRoutes..cbReverse..Hint
-#. frmFilter..gbRoutes..cbReverse..Hint
-#: filter.dfm:361
-#: test/filter.dfm:361
+#: filter.dfm:363
 msgid "Reverse routes and tracks"
 msgstr "Reihenfolge von Wegpunkten in Routen und Tracks umdrehen"
 
 #. frmFilter..gbRoutes..cbReverse..Caption
-#. frmFilter..gbRoutes..cbReverse..Caption
-#: filter.dfm:362
-#: test/filter.dfm:362
+#: filter.dfm:364
 msgid "Reverse"
 msgstr "Umdrehen"
 
 #. frmFilter..pnBottom..btnOK..Caption
-#. frmFilter..pnBottom..btnOK..Caption
-#: filter.dfm:379
-#: test/filter.dfm:379
+#: filter.dfm:381
 msgid "OK"
 msgstr "OK"
 
 #. frmFilter..pnBottom..BitBtn1..Caption
-#. frmFilter..pnBottom..BitBtn1..Caption
-#: filter.dfm:415
-#: test/filter.dfm:415
+#: filter.dfm:417
 msgid "File based filters"
 msgstr "Datei basierende Filter"
 
 #. frmFilter..gbWaypoints..Caption
-#. frmMain..Panel2..cbWaypoints..Caption
-#. frmFilter..gbWaypoints..Caption
-#. frmMain..Panel2..cbWaypoints..Caption
-#: filter.dfm:435
-#: main.dfm:426
-#: test/filter.dfm:435
-#: test/main.dfm:408
+#. frmMain..pnBottom..cbWaypoints..Caption
+#: filter.dfm:437
+#: main.dfm:561
 msgid "&Waypoints"
 msgstr "&Wegpunkte"
 
 #. frmFilter..gbWaypoints..lbWayptRadiusLat..Caption
-#. frmFilter..gbWaypoints..lbWayptRadiusLat..Caption
-#: filter.dfm:444
-#: test/filter.dfm:444
+#: filter.dfm:446
 msgid "Latitude"
 msgstr "Breitengrad"
 
 #. frmFilter..gbWaypoints..lbWayptRadiusLon..Caption
-#. frmFilter..gbWaypoints..lbWayptRadiusLon..Caption
-#: filter.dfm:452
-#: test/filter.dfm:452
+#: filter.dfm:454
 msgid "Longitude"
 msgstr "Längengrad"
 
 #. frmFilter..gbWaypoints..cbWayptMergeDupLoc..Hint
-#. frmFilter..gbWaypoints..cbWayptMergeDupLoc..Hint
-#: filter.dfm:460
-#: test/filter.dfm:460
+#: filter.dfm:462
 msgid "Merge waypoints with duplicate locations"
 msgstr "Fasse Wegpunkte mit gleichen Koordinaten zusammen"
 
 #. frmFilter..gbWaypoints..cbWayptMergeDupLoc..Caption
-#. frmFilter..gbWaypoints..cbWayptMergeDupLoc..Caption
-#: filter.dfm:461
-#: test/filter.dfm:461
+#: filter.dfm:463
 msgid "locations"
 msgstr "Koordinaten"
 
 #. frmFilter..gbWaypoints..cbWayptMergeDupNames..Hint
-#. frmFilter..gbWaypoints..cbWayptMergeDupNames..Hint
-#: filter.dfm:470
-#: test/filter.dfm:470
+#: filter.dfm:472
 msgid "Merge waypoints with duplicate \"short name\""
 msgstr "Fasse Wegpunkte mit gleichem Namen zusammen"
 
 #. frmFilter..gbWaypoints..cbWayptMergeDupNames..Caption
-#. frmFilter..gbWaypoints..cbWayptMergeDupNames..Caption
-#: filter.dfm:471
-#: test/filter.dfm:471
+#: filter.dfm:473
 msgid "\"short names\""
 msgstr "\"Kurznamen\""
 
 #. frmFilter..gbWaypoints..cbWayptMergeDistance..Hint
-#. frmFilter..gbWaypoints..cbWayptMergeDistance..Hint
-#: filter.dfm:480
-#: test/filter.dfm:480
+#: filter.dfm:482
 msgid "Merge waypoints separated by less then"
 msgstr "Fasse alle Wegpunkte zusammen, die weniger als ... auseinander liegen"
 
 #. frmFilter..gbWaypoints..cbWayptMergeDistance..Caption
-#. frmFilter..gbWaypoints..cbWayptMergeDistance..Caption
-#: filter.dfm:481
-#: test/filter.dfm:481
+#: filter.dfm:483
 msgid "Position"
 msgstr "Position"
 
 #. frmFilter..gbWaypoints..cbWayptSort..Hint
-#. frmFilter..gbWaypoints..cbWayptSort..Hint
-#: filter.dfm:509
-#: test/filter.dfm:509
+#: filter.dfm:511
 msgid "Sort waypoints by \"short name\" or by description"
 msgstr "Sortiere Wegpunkte nach Name oder Beschreibung"
 
 #. frmFilter..gbWaypoints..cbWayptSort..Caption
-#. frmFilter..gbWaypoints..cbWayptSort..Caption
-#: filter.dfm:510
-#: test/filter.dfm:510
+#: filter.dfm:512
 msgid "Sort"
 msgstr "Sortieren"
 
 #. frmFilter..gbWaypoints..cbWayptMergeDups..Hint
-#. frmFilter..gbWaypoints..cbWayptMergeDups..Hint
-#: filter.dfm:518
-#: test/filter.dfm:518
+#: filter.dfm:520
 msgid "Merge duplicate waypoints"
 msgstr "Entferne doppelte Wegpunkte"
 
 #. frmFilter..gbWaypoints..cbWayptMergeDups..Caption
-#. frmFilter..gbWaypoints..cbWayptMergeDups..Caption
-#: filter.dfm:519
-#: test/filter.dfm:519
-msgid "Duplicatates"
+#: filter.dfm:521
+msgid "Duplicates"
 msgstr "Duplikate"
 
 #. frmFilter..gbWaypoints..cbWayptRadius..Hint
-#. frmFilter..gbWaypoints..cbWayptRadius..Hint
-#: filter.dfm:528
-#: test/filter.dfm:528
+#: filter.dfm:530
 msgid "Include points based on their proximity to central point"
 msgstr "Übernehme nur Punkte mit Entfernung von maximal ... um Mittelpunkt ..."
 
 #. frmFilter..gbWaypoints..cbWayptRadius..Caption
-#. frmFilter..gbWaypoints..cbWayptRadius..Caption
-#: filter.dfm:529
-#: test/filter.dfm:529
+#: filter.dfm:531
 msgid "Radius"
 msgstr "Radius"
 
 #. frmFilter..gbWaypoints..edWayptRadiusLat..Hint
-#. frmFilter..gbWaypoints..edWayptRadiusLat..Hint
-#: filter.dfm:557
-#: test/filter.dfm:557
+#: filter.dfm:559
 msgid "Latitude of central point"
 msgstr "Breitengrad (Latitude) des Mittelpunktes"
 
 #. frmFilter..gbWaypoints..edWayptRadiusLon..Hint
-#. frmFilter..gbWaypoints..edWayptRadiusLon..Hint
-#: filter.dfm:567
-#: test/filter.dfm:567
+#: filter.dfm:569
 msgid "Longitude of central point"
 msgstr "Längengrad (Longitude) des Mittelpunktes"
 
-#. frmMain..Panel1..sbOpenFile..Hint
-#: main.dfm:35
+#. frmMain..pnTop..gbInput..Caption
+#: main.dfm:38
+#: main.pas:285
+#: main.pas:431
+msgid "Input"
+msgstr "Eingabe"
+
+#. frmMain..pnTop..gbInput..sbOpenFile..Hint
+#: main.dfm:45
 msgid "Start the file open dialog"
 msgstr "Die zu lesende Datei auswählen"
 
-#. frmMain..Panel1..sbSaveFile..Hint
-#: main.dfm:58
-msgid "Start the file save dialog"
-msgstr "Die zu schreibende Datei auswählen"
-
-#. frmMain..Panel1..lbInputFile..Caption
-#. frmMain..Panel1..lbInputFile..Caption
-#: main.dfm:81
-#: test/main.dfm:78
-msgid "&Input file"
-msgstr "Eingabe-Datei"
-
-#. frmMain..Panel1..lbOutputFile..Caption
-#. frmMain..Panel1..lbOutputFile..Caption
-#: main.dfm:89
-#: test/main.dfm:86
-msgid "Out&put file"
-msgstr "Ausgabe-Datei"
-
-#. frmMain..Panel1..lbInputFormat..Caption
-#. frmMain..Panel1..lbInputFormat..Caption
-#: main.dfm:97
-#: test/main.dfm:94
-msgid "Input &format"
-msgstr "Eingabe-Format"
-
-#. frmMain..Panel1..lbOutputFormat..Caption
-#. frmMain..Panel1..lbOutputFormat..Caption
-#: main.dfm:104
-#: test/main.dfm:101
-msgid "Output f&ormat"
-msgstr "Ausgabe-Format"
-
-#. frmMain..Panel1..lbInputOpts..Caption
-#. frmMain..Panel1..lbOutputOpts..Caption
-#. frmMain..Panel1..lbInputOpts..Caption
-#. frmMain..Panel1..lbOutputOpts..Caption
-#: main.dfm:111
-#: main.dfm:119
-#: test/main.dfm:108
-#: test/main.dfm:116
+#. frmMain..pnTop..gbInput..lbInputOpts..Caption
+#. frmMain..pnTop..gbOutput..lbOutputOpts..Caption
+#. frmMain..ActionList1..acOptionsSourceFormat..Category
+#. frmMain..ActionList1..acOptionsTargetFormat..Category
+#. frmMain..ActionList1..acOptionsEnableCharactersetTransformation..Category
+#: main.dfm:68
+#: main.dfm:232
+#: main.dfm:1426
+#: main.dfm:1431
+#: main.dfm:1445
 msgid "Options"
 msgstr "Optionen"
 
-#. frmMain..Panel1..cbInputFormat..Hint
-#: main.dfm:128
-msgid "Format for input from file"
-msgstr "zu benutzendes Eingabeformat"
+#. frmMain..pnTop..gbInput..lbInputFormat..Caption
+#. frmMain..pnTop..gbOutput..lbOutputFormat..Caption
+#: main.dfm:76
+#: main.dfm:262
+msgid "Format"
+msgstr "Format"
 
-#. frmMain..Panel1..cbOutputFormat..Hint
-#: main.dfm:141
-msgid "Format for output to file"
-msgstr "zu benutzendes Ausgabeformat"
-
-#. frmMain..Panel1..edOutputFile..Hint
-#: main.dfm:154
-msgid "Write data to given filename"
-msgstr "Dateiname für Datenausgabe"
-
-#. frmMain..Panel1..edInputFile..Hint
-#: main.dfm:166
-msgid "Read data from given filename"
-msgstr "Lese Daten von Datei ..."
+#. frmMain..pnTop..gbInput..lbInputFile..Caption
+#. frmMain..pnTop..gbOutput..lbOutputFile..Caption
+#. frmMain..ActionList1..acFileExit..Category
+#. frmMain..ActionList1..acFileClearMemo..Category
+#. frmMain..ActionList1..acFileOutputToScreen..Category
+#. frmMain..ActionList1..acFileChangeLanguage..Category
+#: main.dfm:83
+#: main.dfm:269
+#: main.dfm:1407
+#: main.dfm:1436
+#: main.dfm:1451
+#: main.dfm:1463
+#: main.pas:805
+#: main.pas:855
+msgid "File"
+msgstr "Datei"
 
-#. frmMain..Panel1..chbInputDevice..Hint
-#: main.dfm:176
+#. frmMain..pnTop..gbInput..chbInputDevice..Hint
+#: main.dfm:112
 msgid "Read data from device instead from file"
 msgstr "Dateneingabe von \"Gerät\""
 
-#. frmMain..Panel1..chbInputDevice..Caption
-#. frmMain..Panel1..chbOutputDevice..Caption
-#. frmMain..Panel1..chbInputDevice..Caption
-#. frmMain..Panel1..chbOutputDevice..Caption
-#: main.dfm:177
-#: main.dfm:231
-#: test/main.dfm:167
-#: test/main.dfm:217
+#. frmMain..pnTop..gbInput..chbInputDevice..Caption
+#. frmMain..pnTop..gbOutput..chbOutputDevice..Caption
+#: main.dfm:115
+#: main.dfm:302
 msgid "Device"
 msgstr "Gerät"
 
-#. frmMain..Panel1..cbInputDevice..Hint
-#: main.dfm:187
+#. frmMain..pnTop..gbInput..edInputOpts..Hint
+#: main.dfm:124
+msgid "Options for the selected input format"
+msgstr "Optionen für das gewählte Eingabe-Format"
+
+#. frmMain..pnTop..gbInput..edInputFile..Hint
+#: main.dfm:135
+msgid "Read data from given filename"
+msgstr "Lese Daten von Datei ..."
+
+#. frmMain..pnTop..gbInput..cbInputLang..Hint
+#: main.dfm:146
+msgid "Characterset for input data"
+msgstr "Zeichensatz für Eingangsdaten  (nicht jedes Format unterstützt dies!)"
+
+#. frmMain..pnTop..gbInput..cbInputLang....Items.Strings
+#. frmMain..pnTop..gbOutput..cbOutputLang....Items.Strings
+#: main.dfm:152
+#: main.dfm:366
+msgid "- default -"
+msgstr "- Standard -"
+
+#. frmMain..pnTop..gbInput..cbInputDevice..Hint
+#: main.dfm:179
 msgid "Read data from device ..."
 msgstr "lese von Interface/Anschluß..."
 
-#. frmMain..Panel1..cbInputDevice....Items.Strings
-#. frmMain..Panel1..cbOutputDevice....Items.Strings
-#. frmMain..Panel1..cbInputDevice....Items.Strings
-#. frmMain..Panel1..cbOutputDevice....Items.Strings
-#: main.dfm:191
-#: main.dfm:245
-#: test/main.dfm:180
-#: test/main.dfm:230
-msgid "USB"
-msgstr "USB"
-
-#. frmMain..Panel1..cbInputFormatDevice..Hint
-#: main.dfm:205
+#. frmMain..pnTop..gbInput..cbInputFormatDevice..Hint
+#: main.dfm:197
 msgid "Format for input from device"
 msgstr "Eingabeformat des angeschlossenen Gerätes"
 
-#. frmMain..Panel1..cbOutputFormatDevice..Hint
-#: main.dfm:219
-msgid "Format for ouput to device"
-msgstr "Ausgabeformat für angeschlossenes Gerät"
+#. frmMain..pnTop..gbInput..cbInputFormat..Hint
+#: main.dfm:211
+msgid "Format for input from file"
+msgstr "zu benutzendes Eingabeformat"
+
+#. frmMain..pnTop..gbOutput..Caption
+#: main.dfm:225
+#: main.pas:286
+#: main.pas:440
+msgid "Output"
+msgstr "Ausgabe"
+
+#. frmMain..pnTop..gbOutput..sbSaveFile..Hint
+#: main.dfm:276
+msgid "Start the file save dialog"
+msgstr "Die zu schreibende Datei auswählen"
 
-#. frmMain..Panel1..chbOutputDevice..Hint
-#: main.dfm:230
+#. frmMain..pnTop..gbOutput..chbOutputDevice..Hint
+#: main.dfm:299
 msgid "Write data to device instead to file"
 msgstr "Datenausgabe auf \"Gerät\""
 
-#. frmMain..Panel1..cbOutputDevice..Hint
-#: main.dfm:241
-msgid "Write data to device ..."
-msgstr "schreibe nach Interface/Anschluß"
-
-#. frmMain..Panel1..edInputOpts..Hint
-#: main.dfm:258
-msgid "Options for the selected input format"
-msgstr "Optionen für das gewählte Eingabe-Format"
+#. frmMain..pnTop..gbOutput..cbOutputFormatDevice..Hint
+#: main.dfm:312
+msgid "Format for ouput to device"
+msgstr "Ausgabeformat für angeschlossenes Gerät"
 
-#. frmMain..Panel1..edOutputOpts..Hint
-#: main.dfm:267
+#. frmMain..pnTop..gbOutput..edOutputOpts..Hint
+#: main.dfm:324
 msgid "Options for the selected output format"
 msgstr "Optionen für das gewählte Ausgabeformat"
 
-#. frmMain..Panel2..lbWhat..Caption
-#. frmMain..Panel2..lbWhat..Caption
-#: main.dfm:286
-#: test/main.dfm:269
+#. frmMain..pnTop..gbOutput..cbOutputFormat..Hint
+#: main.dfm:335
+msgid "Format for output to file"
+msgstr "zu benutzendes Ausgabeformat"
+
+#. frmMain..pnTop..gbOutput..edOutputFile..Hint
+#: main.dfm:348
+msgid "Write data to given filename"
+msgstr "Dateiname für Datenausgabe"
+
+#. frmMain..pnTop..gbOutput..cbOutputLang..Hint
+#: main.dfm:360
+msgid "Characterset for output data"
+msgstr "Zeichensatz für Ausgangsdaten (nicht jedes Format unterstützt dies!)"
+
+#. frmMain..pnTop..gbOutput..cbOutputDevice..Hint
+#: main.dfm:393
+msgid "Write data to device ..."
+msgstr "schreibe nach Interface/Anschluß"
+
+#. frmMain..pnBottom..lbWhat..Caption
+#: main.dfm:421
 msgid "What ?"
 msgstr "Was?"
 
-#. frmMain..Panel2..cbWaypoints..Hint
-#: main.dfm:425
+#. frmMain..pnBottom..cbWaypoints..Hint
+#: main.dfm:560
 msgid "Include waypoints"
 msgstr "Wegpunkte in Konvertierung einschließen"
 
-#. frmMain..Panel2..cbRoutes..Hint
-#: main.dfm:437
+#. frmMain..pnBottom..cbRoutes..Hint
+#: main.dfm:574
 msgid "Include routes"
 msgstr "Routenpunkte in Konvertierung einschließen"
 
-#. frmMain..Panel2..cbRoutes..Caption
-#. frmMain..Panel2..cbRoutes..Caption
-#: main.dfm:438
-#: test/main.dfm:419
+#. frmMain..pnBottom..cbRoutes..Caption
+#: main.dfm:575
 msgid "&Routes"
 msgstr "&Routen"
 
-#. frmMain..Panel2..cbTracks..Hint
-#: main.dfm:447
+#. frmMain..pnBottom..cbTracks..Hint
+#: main.dfm:586
 msgid "Include tracks"
 msgstr "Trackpunkte in Konvertierung einschließen"
 
-#. frmMain..Panel2..btnFilter..Hint
-#: main.dfm:457
-msgid "Filter incomming data before writing them to file or device"
-msgstr "gelesene Daten filtern"
-
-#. frmMain..Panel2..btnFilter..Caption
-#. frmMain..ActionList1..acFilterSelect..Caption
-#. frmMain..Panel2..btnFilter..Caption
+#. frmMain..pnBottom..btnFilter..Caption
 #. frmMain..ActionList1..acFilterSelect..Caption
-#: main.dfm:460
-#: main.dfm:990
-#: test/main.dfm:439
-#: test/main.dfm:968
+#: main.dfm:600
+#: main.dfm:1401
 msgid "&Filter"
 msgstr "&Filter"
 
-#. frmMain..Panel2..btnProcess..Hint
-#: main.dfm:504
+#. frmMain..pnBottom..btnProcess..Hint
+#: main.dfm:644
 msgid "Start data conversion"
 msgstr "Konvertierung starten"
 
-#. frmMain..Panel2..btnProcess..Caption
+#. frmMain..pnBottom..btnProcess..Caption
 #. frmMain..ActionList1..acConvert..Caption
-#. frmMain..Panel2..btnProcess..Caption
-#. frmMain..ActionList1..acConvert..Caption
-#: main.dfm:507
-#: main.dfm:983
-#: test/main.dfm:485
-#: test/main.dfm:961
+#: main.dfm:647
+#: main.dfm:1394
 msgid "let's go"
 msgstr "und los"
 
-#. frmMain..stbMain........Text
-#. frmMain..stbMain........Text
-#: main.dfm:555
-#: test/main.dfm:533
-msgid "http://www.gpsbabel.org (http://sourceforge.net/projects/gpsbabel)"
-msgstr "http://www.gpsbabel.org (http://sourceforge.net/projects/gpsbabel)"
-
-#. frmMain..OpenDialog..Filter
 #. frmMain..OpenDialog..Filter
-#: main.dfm:562
-#: test/main.dfm:540
+#: main.dfm:709
 msgid "Garmin Mapsource mps|*.mps|All files|*.*"
 msgstr "Garmin Mapsource mps|*.mps|Alle Dateien|*.*"
 
 #. frmMain..SaveDialog..Filter
-#. frmMain..SaveDialog..Filter
-#: main.dfm:568
-#: test/main.dfm:546
+#: main.dfm:715
 msgid "All file(s)|*.*|Garmin MapSource mps|*.mps"
 msgstr "Alle Dateien|*.*|Garmin MapSource mps|*.mps"
 
 #. frmMain..ActionList1..acConvert..Category
 #. frmMain..ActionList1..acFilterSelect..Category
-#. frmMain..ActionList1..acConvert..Category
-#. frmMain..ActionList1..acFilterSelect..Category
-#: main.dfm:982
-#: main.dfm:989
-#: test/main.dfm:960
-#: test/main.dfm:967
+#: main.dfm:1393
+#: main.dfm:1400
 msgid "Babel"
 msgstr "Babel"
 
-#. frmMain..ActionList1..acFileExit..Category
-#. frmMain..ActionList1..acFileExit..Category
-#: main.dfm:995
-#: test/main.dfm:973
-msgid "File"
-msgstr "Datei"
+#. frmMain..ActionList1..acFilterSelect..Hint
+#: main.dfm:1402
+msgid "Filter incomming data before writing them to file or device"
+msgstr "gelesene Daten filtern"
 
 #. frmMain..ActionList1..acFileExit..Caption
-#. frmMain..ActionList1..acFileExit..Caption
-#: main.dfm:996
-#: test/main.dfm:974
+#: main.dfm:1408
 msgid "E&xit"
 msgstr "Beenden"
 
 #. frmMain..ActionList1..acHelpAbout..Category
 #. frmMain..ActionList1..acHelpIntro..Category
 #. frmMain..ActionList1..acHelpReadme..Category
-#. frmMain..ActionList1..acHelpAbout..Category
-#. frmMain..ActionList1..acHelpIntro..Category
-#. frmMain..ActionList1..acHelpReadme..Category
-#: main.dfm:1001
-#: main.dfm:1006
-#: main.dfm:1010
-#: test/main.dfm:979
-#: test/main.dfm:984
-#: test/main.dfm:988
+#: main.dfm:1412
+#: main.dfm:1417
+#: main.dfm:1421
 msgid "Help"
 msgstr "Hilfe"
 
 #. frmMain..ActionList1..acHelpAbout..Caption
-#. frmMain..ActionList1..acHelpAbout..Caption
-#: main.dfm:1002
-#: test/main.dfm:980
+#: main.dfm:1413
 msgid "&About"
 msgstr "Über"
 
 #. frmMain..ActionList1..acHelpIntro..Caption
-#. frmMain..ActionList1..acHelpIntro..Caption
-#: main.dfm:1007
-#: test/main.dfm:985
+#: main.dfm:1418
 msgid "&Intro"
 msgstr "Einführung"
 
 #. frmMain..ActionList1..acHelpReadme..Caption
 #. frmReadme..Caption
-#. frmMain..ActionList1..acHelpReadme..Caption
-#. frmReadme..Caption
-#: main.dfm:1011
+#: main.dfm:1422
 #: readme.dfm:6
-#: test/main.dfm:989
-#: test/readme.dfm:6
 msgid "GPSBabel README"
 msgstr "GPSBabel README"
 
+#. frmMain..ActionList1..acOptionsSourceFormat..Caption
+#: main.dfm:1427
+msgid "... for source format"
+msgstr "... für Quellformat"
+
+#. frmMain..ActionList1..acOptionsTargetFormat..Caption
+#: main.dfm:1432
+msgid "... for target format"
+msgstr "... für Zielformat"
+
+#. frmMain..ActionList1..acFileClearMemo..Caption
+#: main.dfm:1437
+msgid "Clear output"
+msgstr "Meldungen löschen"
+
+#. frmMain..ActionList1..acFileClearMemo..Hint
+#: main.dfm:1438
+msgid "Clear messages"
+msgstr "Meldungen löschen"
+
+#. frmMain..ActionList1..acOptionsEnableCharactersetTransformation..Caption
+#: main.dfm:1446
+msgid "Enable characterset transformation"
+msgstr "Zeichensatz transformieren"
+
+#. frmMain..ActionList1..acFileOutputToScreen..Caption
+#: main.dfm:1452
+msgid "Output to screen"
+msgstr "Ausgabe auf Bildschirm"
+
+#. frmMain..ActionList1..acFileChangeLanguage..Caption
+#: main.dfm:1464
+msgid "Change language"
+msgstr "Sprache Ã¤ndern"
+
 #. frmMain..MainMenu1..mnuFile..Caption
-#. frmMain..MainMenu1..mnuFile..Caption
-#: main.dfm:1020
-#: test/main.dfm:998
+#: main.dfm:1473
 msgid "&File"
 msgstr "&Datei"
 
 #. frmMain..MainMenu1..mnuOptions..Caption
-#. frmMain..MainMenu1..mnuOptions..Caption
-#: main.dfm:1026
-#: test/main.dfm:1004
+#: main.dfm:1494
 msgid "&Options"
 msgstr "&Optionen"
 
 #. frmMain..MainMenu1..mnuOptions..mnuSynthesizeShortNames..Caption
-#. frmMain..MainMenu1..mnuOptions..mnuSynthesizeShortNames..Caption
-#: main.dfm:1028
-#: test/main.dfm:1006
+#: main.dfm:1496
 msgid "Synthesize short names"
 msgstr "Synthetisiere Kurznamen"
 
 #. frmMain..MainMenu1..mnuOptions..mnuSynthesizeShortNames....Hint
-#. frmMain..MainMenu1..mnuOptions..mnuSynthesizeShortNames....Hint
-#: main.dfm:1031
-#: test/main.dfm:1009
+#: main.dfm:1499
 msgid "Ignore \"short\" names from source data and synthesize them from the long name"
 msgstr "Ignoriere alle \"Kurznamen\" und generiere diese neu aus Bechreibung oder Bemerkung"
 
+#. frmMain..MainMenu1..mnuOptions..mnuOptionsForceDataType..Caption
+#: main.dfm:1503
+msgid "Force selected GPS data types (nuketypes filter)"
+msgstr ""
+
 #. frmMain..MainMenu1..mnuHelp..Caption
-#. frmMain..MainMenu1..mnuHelp..Caption
-#: main.dfm:1040
-#: test/main.dfm:1018
+#: main.dfm:1538
 msgid "&Help"
 msgstr "&Hilfe"
 
-#: about.pas:76
-#: test/about.pas:76
-msgid "Version"
-msgstr "Version"
+#. frmOptions..Caption
+#: options.dfm:5
+msgid "Options for ..."
+msgstr "Optionen für ..."
 
-#: about.pas:83
-#: test/about.pas:83
+#: about.pas:87
 msgid "German by Olaf Klein"
 msgstr "Deutsch von Olaf Klein"
 
-#: about.pas:84
-#: test/about.pas:84
+#: about.pas:88
 msgid "French by Lilian Morinon"
 msgstr "Französisch von Lilian Morinon"
 
-#. Programmer's name for it: SGPSBabelURL
-#. Programmer's name for it: SGPSBabelURL
-#: common.pas:27
-#: test/common.pas:27
-msgid "http://www.gpsbabel.org"
-msgstr "http://www.gpsbabel.org"
-
-#: filter.pas:160
-#: test/filter.pas:160
-msgid "Value (%s) out of range (%g to %g)!"
-msgstr "Wert (%s) liegt außerhalb des zulässigen Bereiches  (%g to %g)!"
+#: about.pas:131
+msgid ""
+"Please have a look at the file README.GUI.\n"
+"\n"
+"There you will find all information you need to\n"
+"get GPSBabelGUI working in your own language."
+msgstr ""
+"Werfen Sie einen kurzen Blick in die Datei \"README.GUI\"\n"
+"\n"
+"Dort finden Sie alle nötigen Informationen, um\n"
+"GPSBabelBUI eine neue Sprache beizubringen."
 
-#: filter.pas:228
-#: test/filter.pas:228
+#: filter.pas:199
 msgid "Feet"
 msgstr "\"Feet\" (engl.)"
 
-#: filter.pas:229
-#: test/filter.pas:229
+#: filter.pas:200
 msgid "Meter"
 msgstr "Meter"
 
-#: filter.pas:232
-#: test/filter.pas:232
+#: filter.pas:203
 msgid "Miles"
 msgstr "Meilen"
 
-#: filter.pas:233
-#: test/filter.pas:233
+#: filter.pas:204
 msgid "Kilometer"
 msgstr "Kilometer"
 
-#: main.pas:181
-#: test/main.pas:181
+#: filter.pas:214
+msgid "Not supported by gpsbabel.exe, release %s!"
+msgstr "Wird von gpsbabel.exe, Version %s, nicht unterstützt!"
+
+#: filter.pas:250
+msgid "Value (%s) out of range (%g to %g)!"
+msgstr "Wert (%s) liegt außerhalb des zulässigen Bereiches  (%g to %g)!"
+
+#: filter.pas:530
+#: options.pas:575
+msgid "Discard changes?"
+msgstr "Änderungen verwerfen?"
+
+#: main.pas:238
+msgid "Internal development release"
+msgstr "Interne Entwicklungsausgabe"
+
+#: main.pas:240
 msgid "BETA"
 msgstr "BETA"
 
-#: main.pas:183
-#: test/main.pas:183
+#: main.pas:242
 msgid "Private release"
 msgstr "Private Version"
 
-#: main.pas:185
-#: test/main.pas:185
+#: main.pas:244
 msgid "Special release"
 msgstr "Spezial-Version"
 
-#: main.pas:283
-#: main.pas:378
-#: test/main.pas:281
-#: test/main.pas:376
+#: main.pas:313
+msgid "The file \"gpsbabel.exe\" found in current directory is too old!"
+msgstr "Die Datei \"gpsbabel.exe\" ist zu alt für diese GUI!"
+
+#: main.pas:382
+#: main.pas:510
 msgid "All files|*.*"
 msgstr "Alle Dateien|*.*"
 
-#: main.pas:420
-#: test/main.pas:417
+#: main.pas:448
+msgid "Select and edit options for \"%s\""
+msgstr "Optionen von \"%s\" bearbeiten"
+
+#: main.pas:452
+msgid "No options available for \"%s\""
+msgstr " \"%s\" hat keine Optionen!"
+
+#: main.pas:557
 msgid "File %s not found."
 msgstr "Datei \"%s\" nicht gefunden."
 
-#: main.pas:441
-#: test/main.pas:438
+#: main.pas:615
 msgid "File \"%s\" exists ! Overwrite ?"
 msgstr "Datei \"%s\" existiert bereits! Ãœberschreiben?"
 
-#: main.pas:442
-#: test/main.pas:439
+#: main.pas:616
 msgid "Warning"
 msgstr "Warnung"
 
-#: main.pas:471
-#: test/main.pas:468
+#: main.pas:649
 msgid "Could not run \"gpsbabel.exe\"!"
 msgstr "Konnte \"gpsbabel.exe\" nicht ausführen!"
 
-#: main.pas:481
+#: main.pas:658
 msgid "Sorry, gpsbabel.exe reported problems!"
 msgstr "Uhps, da ging etwas schief!"
 
-#: main.pas:482
-msgid "Error"
-msgstr "Fehler"
-
-#: main.pas:485
-#: test/main.pas:477
+#: main.pas:660
 msgid "Converted successfully from \"%s\" to \"%s\"."
 msgstr "Erfolgreich konvertiert von \"%s\" zu \"%s\"."
 
-#: main.pas:486
-#: test/main.pas:478
-msgid "Success"
-msgstr "Erfolg"
+#: main.pas:761
+msgid "GPSBabel, version %s"
+msgstr "GPSBabel, Version %s"
+
+#: main.pas:795
+#: main.pas:846
+msgid "Port"
+msgstr "Schnittstelle"
+
+#: main.pas:937
+msgid "Options for \"%s\""
+msgstr "Optionen für \"%s\""
+
+#. override;
+#: options.pas:86
+msgid "Be aware, that most options are made for the output side. "
+msgstr "Achtung: die meisten Optionen sind vermutlich für die Datenausgabe gedacht."
 
-#: utils.pas:86
-#: test/utils.pas:76
+#: options.pas:87
+msgid "Currently we don't have a flag which tells us which direction is used the options."
+msgstr "Wir verfügen z.Z. Ã¼ber kein Merkmal Ã¼ber die Arbeitsweise der Optionen."
+
+#: options.pas:145
+msgid "Short \"%s\""
+msgstr "Abkürzung \"%s\""
+
+#: options.pas:246
+msgid "Invalid line format!"
+msgstr "Ungültiger Zeilenaufbau!"
+
+#: options.pas:267
+msgid "Unknown option \"%s\"!"
+msgstr "Unbekannte Option \"%s\"!"
+
+#: utils.pas:108
 msgid "Error WINAPI: Could not create \"NamedPipe\"!"
 msgstr "Fehler WINAPI:  \"NamedPipe\" konnte nicht erstellt werden!"
 
-#: utils.pas:91
-#: test/utils.pas:81
+#: utils.pas:113
 msgid "\"gpsbabel.exe\" not found!!!"
 msgstr "\"gpsbabel.exe\" wurde nicht gefunden!!!"
 
 #. dwCreationFlags,     // creation flags
-#. dwCreationFlags,     // creation flags
-#: utils.pas:110
-#: test/utils.pas:100
+#: utils.pas:132
 msgid "Could not run \"gpsbabel.exe\" (Error %d)!"
 msgstr "Konnte \"gpsbabel.exe\" nicht ausführen (Fehler %d)!"
 
-#: utils.pas:116
-#: test/utils.pas:106
+#: utils.pas:160
 msgid "\"gpsbabel.exe\" returned error 0x%x (%d)"
 msgstr "\"gpsbabel.exe\" verließ uns mit Fehler 0x%x (%d)!"
 
index 3a7d4d87095880badeba0a20e10655566ef30387..bce73aa4cfeb6a2cd287be9b85e9fb40c0e15fc3 100644 (file)
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: French version\n"
 "POT-Creation-Date: 2005-09-22 23:44\n"
-"PO-Revision-Date: 2005-11-01 19:32+0100\n"
-"Last-Translator: Lilian Morinon <lilian_morinon@yahoo.fr>\n"
+"PO-Revision-Date: 2005-11-20 21:14+0100\n"
+"Last-Translator: Olaf Klein <o.b.klein@t-online.de>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -19,874 +19,772 @@ msgstr ""
 "X-Poedit-SourceCharset: utf-8\n"
 "Plural-Forms: s\n"
 
-#. frmAbout..Caption
 #. frmAbout..Caption
 #: about.dfm:5
-#: test/about.dfm:5
 msgid "About"
 msgstr "A propos"
 
 #. frmAbout..pnClient..pnCenter..lbHint1..Caption
-#. frmAbout..pnClient..pnCenter..lbHint1..Caption
-#: about.dfm:74
-#: test/about.dfm:74
+#: about.dfm:76
 msgid "This program is part of the GPSBabel project, hosted on"
 msgstr "Ce programme fait partie du projet GPSBabel, hébergé sur"
 
-# +++ IGNORE +++
-#. frmAbout..pnClient..pnCenter..lbVersion..Caption
 #. frmAbout..pnClient..pnCenter..lbVersion..Caption
-#: about.dfm:82
-#: test/about.dfm:82
-msgid "Version 0.2"
+#: about.dfm:84
+#: about.pas:80
+msgid "Version"
 msgstr ""
 
 #. frmAbout..pnClient..pnCenter..lbTranslators..Caption
-#. frmAbout..pnClient..pnCenter..lbTranslators..Caption
-#: about.dfm:89
-#: test/about.dfm:89
+#: about.dfm:91
 msgid "Translations"
 msgstr "Traductions"
 
 #. frmAbout..pnClient..pnCenter..lbURL..Caption
-#. frmAbout..pnClient..pnCenter..lbURL..Caption
-#: about.dfm:96
-#: test/about.dfm:96
+#: about.dfm:98
 msgid "www.gpsbabel.org"
 msgstr "www.gpsbabel.org"
 
 #. frmAbout..pnClient..pnCenter..lbCopyRight..Caption
-#. frmAbout..pnClient..pnCenter..lbCopyRight..Caption
-#: about.dfm:112
-#: test/about.dfm:112
+#: about.dfm:114
 msgid "Copyright (C) 2005 Olaf Klein (O.B.Klein@T-Online.de)"
 msgstr ""
 
 #. frmAbout..pnClient..pnCenter..lbMoreInfo..Caption
-#. frmAbout..pnClient..pnCenter..lbMoreInfo..Caption
-#: about.dfm:119
-#: test/about.dfm:119
+#: about.dfm:121
 msgid "Find more info at"
 msgstr "Plus d'infos sur"
 
-#. frmAbout..pnClient..pnCenter..lbSFURL..Caption
-#. frmAbout..pnClient..pnCenter..lbSFURL..Caption
-#: about.dfm:126
-#: test/about.dfm:126
-msgid "SourceForge.net"
-msgstr "SourceForge.net"
-
 #. frmAbout..pnClient..pnCenter..stDescription..Caption
-#. frmAbout..pnClient..pnCenter..stDescription..Caption
-#: about.dfm:147
-#: test/about.dfm:147
+#: about.dfm:149
 msgid "The frontend for gpsbabel command line program"
 msgstr "L'interface graphique de gpsbabel"
 
 #. frmAbout..pnClient..pnCenter..stLicense..Caption
-#. frmAbout..pnClient..pnCenter..stLicense..Caption
-#: about.dfm:161
-#: test/about.dfm:161
+#: about.dfm:163
 msgid "THIS SOFTWARE MAY ONLY BE LICENSED FREE OF CHARGE"
 msgstr "Ce prgramme ne peut Ãªtre utilisé que sous license gratuite"
 
-#. frmFilter..Caption
+#. frmAbout..pnClient..pnCenter..btnNewLanguage..Caption
+#: about.dfm:192
+msgid "Adding a new language"
+msgstr ""
+
 #. frmFilter..Caption
 #: filter.dfm:6
-#: test/filter.dfm:6
 msgid "Filter"
 msgstr "Filtre"
 
 #. frmFilter..gbTracks..Caption
-#. frmMain..Panel2..cbTracks..Caption
-#. frmFilter..gbTracks..Caption
-#. frmMain..Panel2..cbTracks..Caption
-#: filter.dfm:29
-#: main.dfm:448
-#: test/filter.dfm:29
-#: test/main.dfm:428
+#. frmMain..pnBottom..cbTracks..Caption
+#: filter.dfm:31
+#: main.dfm:587
 msgid "&Tracks"
 msgstr "&Traces"
 
 #. frmFilter..gbTracks..lbTimePlusMinus..Caption
-#. frmFilter..gbTracks..lbTimePlusMinus..Caption
-#: filter.dfm:37
-#: test/filter.dfm:37
+#: filter.dfm:39
 msgid "by"
 msgstr "par"
 
 #. frmFilter..gbTracks..lbTimeDays..Caption
-#. frmFilter..gbTracks..lbTimeDays..Caption
-#: filter.dfm:44
-#: test/filter.dfm:44
+#: filter.dfm:46
 msgid "day(s), "
 msgstr "jour(s),"
 
 #. frmFilter..gbTracks..lbTimeHours..Caption
-#. frmFilter..gbTracks..lbTimeHours..Caption
-#: filter.dfm:51
-#: test/filter.dfm:51
+#: filter.dfm:53
 msgid "hour(s), "
 msgstr "heure(s)"
 
 #. frmFilter..gbTracks..lbTimeMinutes..Caption
-#. frmFilter..gbTracks..lbTimeMinutes..Caption
-#: filter.dfm:58
-#: test/filter.dfm:58
+#: filter.dfm:60
 msgid "minute(s),"
 msgstr "minute(s)"
 
 #. frmFilter..gbTracks..lbTimeSeconds..Caption
-#. frmFilter..gbTracks..lbTimeSeconds..Caption
-#: filter.dfm:65
-#: test/filter.dfm:65
+#: filter.dfm:67
 msgid "second(s)"
 msgstr "seconde(s)"
 
 #. frmFilter..gbTracks..cbTrackTitle..Hint
-#. frmFilter..gbTracks..cbTrackTitle..Hint
-#: filter.dfm:72
-#: test/filter.dfm:72
+#: filter.dfm:74
 msgid "Title for new tracks"
 msgstr "Titres des nouvelles traces"
 
 #. frmFilter..gbTracks..cbTrackTitle..Caption
-#. frmFilter..gbTracks..cbTrackTitle..Caption
-#: filter.dfm:74
-#: test/filter.dfm:74
+#: filter.dfm:76
 msgid "Tit&le"
 msgstr "Tit&re"
 
-#. frmFilter..gbTracks..edTrackTitle..Text
-#. frmFilter..gbTracks..edTrackTitle..Text
-#: filter.dfm:86
-#: test/filter.dfm:86
-msgid "ACTIVE LOG # %Y%m%d"
-msgstr "ACTIVE LOG # %Y%m%d"
-
 #. frmFilter..gbTracks..cbTrackSplit..Hint
-#. frmFilter..gbTracks..cbTrackSplit..Hint
-#: filter.dfm:93
-#: test/filter.dfm:93
+#: filter.dfm:95
 msgid "Split track into several tracks depending on date of trackpoint"
 msgstr "Scinder la trace en plusieurs traces en fonction de la date des points"
 
 #. frmFilter..gbTracks..cbTrackSplit..Caption
-#. frmFilter..gbTracks..cbTrackSplit..Caption
-#: filter.dfm:94
-#: test/filter.dfm:94
+#: filter.dfm:96
 msgid "&Split"
 msgstr "&Scinder"
 
 #. frmFilter..gbTracks..cbTrackTime..Hint
-#. frmFilter..gbTracks..cbTrackTime..Hint
-#: filter.dfm:102
-#: test/filter.dfm:102
+#: filter.dfm:104
 msgid "Shift all tracks"
 msgstr "Inverser toutes les traces"
 
 #. frmFilter..gbTracks..cbTrackTime..Caption
-#. frmFilter..gbTracks..cbTrackTime..Caption
-#: filter.dfm:103
-#: test/filter.dfm:103
+#: filter.dfm:105
 msgid "&Move"
 msgstr "&Déplacer"
 
 #. frmFilter..gbTracks..cbTrackStart..Hint
-#. frmFilter..gbTracks..cbTrackStart..Hint
-#: filter.dfm:195
-#: test/filter.dfm:195
+#: filter.dfm:197
 msgid "Take only trackpoints starting at"
 msgstr "Utiliser seulement les points commençant Ã "
 
 #. frmFilter..gbTracks..cbTrackStart..Caption
-#. frmFilter..gbTracks..cbTrackStart..Caption
-#: filter.dfm:196
-#: test/filter.dfm:196
+#: filter.dfm:198
 msgid "Start at"
 msgstr "Commencer Ã "
 
 #. frmFilter..gbTracks..cbTrackStop..Caption
-#. frmFilter..gbTracks..cbTrackStop..Caption
-#: filter.dfm:235
-#: test/filter.dfm:235
+#: filter.dfm:237
 msgid "stop at"
 msgstr "Arrêter Ã "
 
 #. frmFilter..gbTracks..cbTrackPack..Hint
-#. frmFilter..gbTracks..cbTrackPack..Hint
-#: filter.dfm:274
-#: test/filter.dfm:274
+#: filter.dfm:276
 msgid "Pack all tracks into one track (No duplicate timestamps)"
 msgstr "Fusionner toutes les traces en une seule (pas de duplication de l'horodatage)"
 
 #. frmFilter..gbTracks..cbTrackPack..Caption
-#. frmFilter..gbTracks..cbTrackPack..Caption
-#: filter.dfm:275
-#: test/filter.dfm:275
+#: filter.dfm:277
 msgid "&Pack (or)"
 msgstr "&Fusionner (ou)"
 
 #. frmFilter..gbTracks..cbTrackMerge..Hint
-#. frmFilter..gbTracks..cbTrackMerge..Hint
-#: filter.dfm:284
-#: test/filter.dfm:284
+#: filter.dfm:286
 msgid "Merge all tracks into one track"
 msgstr "Fusionner toutes les traces en une seule"
 
 #. frmFilter..gbTracks..cbTrackMerge..Caption
-#. frmFilter..gbTracks..cbTrackMerge..Caption
-#: filter.dfm:285
-#: test/filter.dfm:285
+#: filter.dfm:287
 msgid "Merge"
 msgstr "Fusionner"
 
 #. frmFilter..gbTracks..cbTrackRangeTimeZone..Hint
-#. frmFilter..gbTracks..cbTrackRangeTimeZone..Hint
-#: filter.dfm:294
-#: test/filter.dfm:294
+#: filter.dfm:296
 msgid "Shift start/stop by local timezone offset"
 msgstr "Décaler le début/fin en fonction du décalage horaire local"
 
 #. frmFilter..gbTracks..cbTrackRangeTimeZone..Caption
-#. frmFilter..gbTracks..cbTrackRangeTimeZone..Caption
-#: filter.dfm:295
-#: test/filter.dfm:295
+#: filter.dfm:297
 msgid "TZ"
 msgstr ""
 
 #. frmFilter..gbRoutes..Caption
-#. frmFilter..gbRoutes..Caption
-#: filter.dfm:306
-#: test/filter.dfm:306
+#: filter.dfm:308
 msgid "&Routes && Tracks"
 msgstr "&Routes && Traces"
 
 #. frmFilter..gbRoutes..lbRouteSimplifyCount..Caption
-#. frmFilter..gbRoutes..lbRouteSimplifyCount..Caption
-#: filter.dfm:314
-#: test/filter.dfm:314
+#: filter.dfm:316
 msgid "limit to"
 msgstr "limiter Ã "
 
 #. frmFilter..gbRoutes..lbRouteSimplifyText..Caption
-#. frmFilter..gbRoutes..lbRouteSimplifyText..Caption
-#: filter.dfm:322
-#: test/filter.dfm:322
+#: filter.dfm:324
 msgid "Points"
 msgstr ""
 
 #. frmFilter..gbRoutes..cbRouteSimplify..Hint
-#. frmFilter..gbRoutes..cbRouteSimplify..Hint
-#: filter.dfm:329
-#: test/filter.dfm:329
+#: filter.dfm:331
 msgid "Simplify routes and tracks by limited number of points"
 msgstr "Simplifier les routes et traces en limitant le nombre de points"
 
 #. frmFilter..gbRoutes..cbRouteSimplify..Caption
-#. frmFilter..gbRoutes..cbRouteSimplify..Caption
-#: filter.dfm:330
-#: test/filter.dfm:330
+#: filter.dfm:332
 msgid "Simplify"
 msgstr "Simplifier"
 
 #. frmFilter..gbRoutes..edRoutesSimplifyMaxPoints..Hint
-#. frmFilter..gbRoutes..edRoutesSimplifyMaxPoints..Hint
-#: filter.dfm:339
-#: test/filter.dfm:339
+#: filter.dfm:341
 msgid "Upper limit of points for routes and tracks"
 msgstr "Limite maximum du nombre de points pour les routes et traces"
 
 #. frmFilter..gbRoutes..cbReverse..Hint
-#. frmFilter..gbRoutes..cbReverse..Hint
-#: filter.dfm:361
-#: test/filter.dfm:361
+#: filter.dfm:363
 msgid "Reverse routes and tracks"
 msgstr "Inverser les routes et les traces"
 
 #. frmFilter..gbRoutes..cbReverse..Caption
-#. frmFilter..gbRoutes..cbReverse..Caption
-#: filter.dfm:362
-#: test/filter.dfm:362
+#: filter.dfm:364
 msgid "Reverse"
 msgstr "Inverser"
 
 #. frmFilter..pnBottom..btnOK..Caption
-#. frmFilter..pnBottom..btnOK..Caption
-#: filter.dfm:379
-#: test/filter.dfm:379
+#: filter.dfm:381
 msgid "OK"
 msgstr "OK"
 
 #. frmFilter..pnBottom..BitBtn1..Caption
-#. frmFilter..pnBottom..BitBtn1..Caption
-#: filter.dfm:415
-#: test/filter.dfm:415
+#: filter.dfm:417
 msgid "File based filters"
 msgstr "Filtres de fichiers"
 
 #. frmFilter..gbWaypoints..Caption
-#. frmMain..Panel2..cbWaypoints..Caption
-#. frmFilter..gbWaypoints..Caption
-#. frmMain..Panel2..cbWaypoints..Caption
-#: filter.dfm:435
-#: main.dfm:426
-#: test/filter.dfm:435
-#: test/main.dfm:408
+#. frmMain..pnBottom..cbWaypoints..Caption
+#: filter.dfm:437
+#: main.dfm:561
 msgid "&Waypoints"
 msgstr ""
 
 #. frmFilter..gbWaypoints..lbWayptRadiusLat..Caption
-#. frmFilter..gbWaypoints..lbWayptRadiusLat..Caption
-#: filter.dfm:444
-#: test/filter.dfm:444
+#: filter.dfm:446
 msgid "Latitude"
 msgstr ""
 
 #. frmFilter..gbWaypoints..lbWayptRadiusLon..Caption
-#. frmFilter..gbWaypoints..lbWayptRadiusLon..Caption
-#: filter.dfm:452
-#: test/filter.dfm:452
+#: filter.dfm:454
 msgid "Longitude"
 msgstr ""
 
 #. frmFilter..gbWaypoints..cbWayptMergeDupLoc..Hint
-#. frmFilter..gbWaypoints..cbWayptMergeDupLoc..Hint
-#: filter.dfm:460
-#: test/filter.dfm:460
+#: filter.dfm:462
 msgid "Merge waypoints with duplicate locations"
 msgstr "Fusionner les waypoints avec les positions en doublon"
 
 #. frmFilter..gbWaypoints..cbWayptMergeDupLoc..Caption
-#. frmFilter..gbWaypoints..cbWayptMergeDupLoc..Caption
-#: filter.dfm:461
-#: test/filter.dfm:461
+#: filter.dfm:463
 msgid "locations"
 msgstr "positions"
 
 #. frmFilter..gbWaypoints..cbWayptMergeDupNames..Hint
-#. frmFilter..gbWaypoints..cbWayptMergeDupNames..Hint
-#: filter.dfm:470
-#: test/filter.dfm:470
+#: filter.dfm:472
 msgid "Merge waypoints with duplicate \"short name\""
 msgstr "Fusionner les waypoints avec les doublons \"short name\""
 
 #. frmFilter..gbWaypoints..cbWayptMergeDupNames..Caption
-#. frmFilter..gbWaypoints..cbWayptMergeDupNames..Caption
-#: filter.dfm:471
-#: test/filter.dfm:471
+#: filter.dfm:473
 msgid "\"short names\""
 msgstr "\"noms courts\""
 
 #. frmFilter..gbWaypoints..cbWayptMergeDistance..Hint
-#. frmFilter..gbWaypoints..cbWayptMergeDistance..Hint
-#: filter.dfm:480
-#: test/filter.dfm:480
+#: filter.dfm:482
 msgid "Merge waypoints separated by less then"
 msgstr "Fusionner les waypoints séparé par moins de"
 
 #. frmFilter..gbWaypoints..cbWayptMergeDistance..Caption
-#. frmFilter..gbWaypoints..cbWayptMergeDistance..Caption
-#: filter.dfm:481
-#: test/filter.dfm:481
+#: filter.dfm:483
 msgid "Position"
 msgstr ""
 
 #. frmFilter..gbWaypoints..cbWayptSort..Hint
-#. frmFilter..gbWaypoints..cbWayptSort..Hint
-#: filter.dfm:509
-#: test/filter.dfm:509
+#: filter.dfm:511
 msgid "Sort waypoints by \"short name\" or by description"
 msgstr "Trier les waypoints par \"short name\" ou par description"
 
 #. frmFilter..gbWaypoints..cbWayptSort..Caption
-#. frmFilter..gbWaypoints..cbWayptSort..Caption
-#: filter.dfm:510
-#: test/filter.dfm:510
+#: filter.dfm:512
 msgid "Sort"
 msgstr "Trier"
 
 #. frmFilter..gbWaypoints..cbWayptMergeDups..Hint
-#. frmFilter..gbWaypoints..cbWayptMergeDups..Hint
-#: filter.dfm:518
-#: test/filter.dfm:518
+#: filter.dfm:520
 msgid "Merge duplicate waypoints"
 msgstr "Fusionner les waypoints identiques"
 
 #. frmFilter..gbWaypoints..cbWayptMergeDups..Caption
-#. frmFilter..gbWaypoints..cbWayptMergeDups..Caption
-#: filter.dfm:519
-#: test/filter.dfm:519
-msgid "Duplicatates"
+#: filter.dfm:521
+msgid "Duplicates"
 msgstr "Doublons"
 
 #. frmFilter..gbWaypoints..cbWayptRadius..Hint
-#. frmFilter..gbWaypoints..cbWayptRadius..Hint
-#: filter.dfm:528
-#: test/filter.dfm:528
+#: filter.dfm:530
 msgid "Include points based on their proximity to central point"
 msgstr "Inclure les points en fonction de la proximité d'un point central"
 
 #. frmFilter..gbWaypoints..cbWayptRadius..Caption
-#. frmFilter..gbWaypoints..cbWayptRadius..Caption
-#: filter.dfm:529
-#: test/filter.dfm:529
+#: filter.dfm:531
 msgid "Radius"
 msgstr "Rayon"
 
 #. frmFilter..gbWaypoints..edWayptRadiusLat..Hint
-#. frmFilter..gbWaypoints..edWayptRadiusLat..Hint
-#: filter.dfm:557
-#: test/filter.dfm:557
+#: filter.dfm:559
 msgid "Latitude of central point"
 msgstr "Latitude du point central"
 
 #. frmFilter..gbWaypoints..edWayptRadiusLon..Hint
-#. frmFilter..gbWaypoints..edWayptRadiusLon..Hint
-#: filter.dfm:567
-#: test/filter.dfm:567
+#: filter.dfm:569
 msgid "Longitude of central point"
 msgstr "Longitude du point central"
 
-#. frmMain..Panel1..sbOpenFile..Hint
-#: main.dfm:35
+#. frmMain..pnTop..gbInput..Caption
+#: main.dfm:38
+#: main.pas:285
+#: main.pas:431
+msgid "Input"
+msgstr "Entrée"
+
+#. frmMain..pnTop..gbInput..sbOpenFile..Hint
+#: main.dfm:45
 msgid "Start the file open dialog"
 msgstr "Menu de d'ouverture de fichier"
 
-#. frmMain..Panel1..sbSaveFile..Hint
-#: main.dfm:58
-msgid "Start the file save dialog"
-msgstr "Menu de sauvegarde de fichier"
-
-#. frmMain..Panel1..lbInputFile..Caption
-#. frmMain..Panel1..lbInputFile..Caption
-#: main.dfm:81
-#: test/main.dfm:78
-msgid "&Input file"
-msgstr "Fichier &source"
-
-#. frmMain..Panel1..lbOutputFile..Caption
-#. frmMain..Panel1..lbOutputFile..Caption
-#: main.dfm:89
-#: test/main.dfm:86
-msgid "Out&put file"
-msgstr "Fichier &cible"
-
-#. frmMain..Panel1..lbInputFormat..Caption
-#. frmMain..Panel1..lbInputFormat..Caption
-#: main.dfm:97
-#: test/main.dfm:94
-msgid "Input &format"
-msgstr "Format sou&rce"
-
-#. frmMain..Panel1..lbOutputFormat..Caption
-#. frmMain..Panel1..lbOutputFormat..Caption
-#: main.dfm:104
-#: test/main.dfm:101
-msgid "Output f&ormat"
-msgstr "Format ci&ble"
-
-#. frmMain..Panel1..lbInputOpts..Caption
-#. frmMain..Panel1..lbOutputOpts..Caption
-#. frmMain..Panel1..lbInputOpts..Caption
-#. frmMain..Panel1..lbOutputOpts..Caption
-#: main.dfm:111
-#: main.dfm:119
-#: test/main.dfm:108
-#: test/main.dfm:116
+#. frmMain..pnTop..gbInput..lbInputOpts..Caption
+#. frmMain..pnTop..gbOutput..lbOutputOpts..Caption
+#. frmMain..ActionList1..acOptionsSourceFormat..Category
+#. frmMain..ActionList1..acOptionsTargetFormat..Category
+#. frmMain..ActionList1..acOptionsEnableCharactersetTransformation..Category
+#: main.dfm:68
+#: main.dfm:232
+#: main.dfm:1426
+#: main.dfm:1431
+#: main.dfm:1445
 msgid "Options"
 msgstr ""
 
-#. frmMain..Panel1..cbInputFormat..Hint
-#: main.dfm:128
-msgid "Format for input from file"
-msgstr "Format d'entrée depuis un fichier"
-
-#. frmMain..Panel1..cbOutputFormat..Hint
-#: main.dfm:141
-msgid "Format for output to file"
-msgstr "Format de sortie vers un fichier"
-
-#. frmMain..Panel1..edOutputFile..Hint
-#: main.dfm:154
-msgid "Write data to given filename"
-msgstr "Ecrire les données dans un fichier"
+#. frmMain..pnTop..gbInput..lbInputFormat..Caption
+#. frmMain..pnTop..gbOutput..lbOutputFormat..Caption
+#: main.dfm:76
+#: main.dfm:262
+msgid "Format"
+msgstr ""
 
-#. frmMain..Panel1..edInputFile..Hint
-#: main.dfm:166
-msgid "Read data from given filename"
-msgstr "Lire les données de puis un fichier"
+#. frmMain..pnTop..gbInput..lbInputFile..Caption
+#. frmMain..pnTop..gbOutput..lbOutputFile..Caption
+#. frmMain..ActionList1..acFileExit..Category
+#. frmMain..ActionList1..acFileClearMemo..Category
+#. frmMain..ActionList1..acFileOutputToScreen..Category
+#. frmMain..ActionList1..acFileChangeLanguage..Category
+#: main.dfm:83
+#: main.dfm:269
+#: main.dfm:1407
+#: main.dfm:1436
+#: main.dfm:1451
+#: main.dfm:1463
+#: main.pas:805
+#: main.pas:855
+msgid "File"
+msgstr "Fichier"
 
-#. frmMain..Panel1..chbInputDevice..Hint
-#: main.dfm:176
+#. frmMain..pnTop..gbInput..chbInputDevice..Hint
+#: main.dfm:112
 msgid "Read data from device instead from file"
 msgstr "Lire les données depuis un périphérique plutôt qu'un fichier"
 
-#. frmMain..Panel1..chbInputDevice..Caption
-#. frmMain..Panel1..chbOutputDevice..Caption
-#. frmMain..Panel1..chbInputDevice..Caption
-#. frmMain..Panel1..chbOutputDevice..Caption
-#: main.dfm:177
-#: main.dfm:231
-#: test/main.dfm:167
-#: test/main.dfm:217
+#. frmMain..pnTop..gbInput..chbInputDevice..Caption
+#. frmMain..pnTop..gbOutput..chbOutputDevice..Caption
+#: main.dfm:115
+#: main.dfm:302
 msgid "Device"
 msgstr "Périphérique"
 
-#. frmMain..Panel1..cbInputDevice..Hint
-#: main.dfm:187
+#. frmMain..pnTop..gbInput..edInputOpts..Hint
+#: main.dfm:124
+msgid "Options for the selected input format"
+msgstr "Options du format d'entrée sélectionné"
+
+#. frmMain..pnTop..gbInput..edInputFile..Hint
+#: main.dfm:135
+msgid "Read data from given filename"
+msgstr "Lire les données de puis un fichier"
+
+#. frmMain..pnTop..gbInput..cbInputLang..Hint
+#: main.dfm:146
+msgid "Characterset for input data"
+msgstr "Code de caractères pour l'entrée"
+
+#. frmMain..pnTop..gbInput..cbInputLang....Items.Strings
+#. frmMain..pnTop..gbOutput..cbOutputLang....Items.Strings
+#: main.dfm:152
+#: main.dfm:366
+msgid "- default -"
+msgstr "- défaut -"
+
+#. frmMain..pnTop..gbInput..cbInputDevice..Hint
+#: main.dfm:179
 msgid "Read data from device ..."
 msgstr "Lire les données depuis le périphérique"
 
-#. frmMain..Panel1..cbInputDevice....Items.Strings
-#. frmMain..Panel1..cbOutputDevice....Items.Strings
-#. frmMain..Panel1..cbInputDevice....Items.Strings
-#. frmMain..Panel1..cbOutputDevice....Items.Strings
-#: main.dfm:191
-#: main.dfm:245
-#: test/main.dfm:180
-#: test/main.dfm:230
-msgid "USB"
-msgstr "USB"
-
-#. frmMain..Panel1..cbInputFormatDevice..Hint
-#: main.dfm:205
+#. frmMain..pnTop..gbInput..cbInputFormatDevice..Hint
+#: main.dfm:197
 msgid "Format for input from device"
 msgstr "Format d'entrée depuis le périphérique"
 
-#. frmMain..Panel1..cbOutputFormatDevice..Hint
-#: main.dfm:219
-msgid "Format for ouput to device"
-msgstr "Format de sortie vers le périphérique"
+#. frmMain..pnTop..gbInput..cbInputFormat..Hint
+#: main.dfm:211
+msgid "Format for input from file"
+msgstr "Format d'entrée depuis un fichier"
+
+#. frmMain..pnTop..gbOutput..Caption
+#: main.dfm:225
+#: main.pas:286
+#: main.pas:440
+msgid "Output"
+msgstr ""
+
+#. frmMain..pnTop..gbOutput..sbSaveFile..Hint
+#: main.dfm:276
+msgid "Start the file save dialog"
+msgstr "Menu de sauvegarde de fichier"
 
-#. frmMain..Panel1..chbOutputDevice..Hint
-#: main.dfm:230
+#. frmMain..pnTop..gbOutput..chbOutputDevice..Hint
+#: main.dfm:299
 msgid "Write data to device instead to file"
 msgstr "Ecrire les données sur le périphérique plutôt que dans un fichier"
 
-#. frmMain..Panel1..cbOutputDevice..Hint
-#: main.dfm:241
-msgid "Write data to device ..."
-msgstr "Ecrire les données sur le périphérique"
-
-#. frmMain..Panel1..edInputOpts..Hint
-#: main.dfm:258
-msgid "Options for the selected input format"
-msgstr "Options du format d'entrée sélectionné"
+#. frmMain..pnTop..gbOutput..cbOutputFormatDevice..Hint
+#: main.dfm:312
+msgid "Format for ouput to device"
+msgstr "Format de sortie vers le périphérique"
 
-#. frmMain..Panel1..edOutputOpts..Hint
-#: main.dfm:267
+#. frmMain..pnTop..gbOutput..edOutputOpts..Hint
+#: main.dfm:324
 msgid "Options for the selected output format"
 msgstr "Options du format de sortie sélectionné"
 
-#. frmMain..Panel2..lbWhat..Caption
-#. frmMain..Panel2..lbWhat..Caption
-#: main.dfm:286
-#: test/main.dfm:269
+#. frmMain..pnTop..gbOutput..cbOutputFormat..Hint
+#: main.dfm:335
+msgid "Format for output to file"
+msgstr "Format de sortie vers un fichier"
+
+#. frmMain..pnTop..gbOutput..edOutputFile..Hint
+#: main.dfm:348
+msgid "Write data to given filename"
+msgstr "Ecrire les données dans un fichier"
+
+#. frmMain..pnTop..gbOutput..cbOutputLang..Hint
+#: main.dfm:360
+msgid "Characterset for output data"
+msgstr "Code de caractères pour la sortie"
+
+#. frmMain..pnTop..gbOutput..cbOutputDevice..Hint
+#: main.dfm:393
+msgid "Write data to device ..."
+msgstr "Ecrire les données sur le périphérique"
+
+#. frmMain..pnBottom..lbWhat..Caption
+#: main.dfm:421
 msgid "What ?"
 msgstr "Quoi ?"
 
-#. frmMain..Panel2..cbWaypoints..Hint
-#: main.dfm:425
+#. frmMain..pnBottom..cbWaypoints..Hint
+#: main.dfm:560
 msgid "Include waypoints"
 msgstr "Inclure les waypoints"
 
-#. frmMain..Panel2..cbRoutes..Hint
-#: main.dfm:437
+#. frmMain..pnBottom..cbRoutes..Hint
+#: main.dfm:574
 msgid "Include routes"
 msgstr "Inclure les routes"
 
-#. frmMain..Panel2..cbRoutes..Caption
-#. frmMain..Panel2..cbRoutes..Caption
-#: main.dfm:438
-#: test/main.dfm:419
+#. frmMain..pnBottom..cbRoutes..Caption
+#: main.dfm:575
 msgid "&Routes"
 msgstr ""
 
-#. frmMain..Panel2..cbTracks..Hint
-#: main.dfm:447
+#. frmMain..pnBottom..cbTracks..Hint
+#: main.dfm:586
 msgid "Include tracks"
 msgstr "Inclure les traces"
 
-#. frmMain..Panel2..btnFilter..Hint
-#: main.dfm:457
-msgid "Filter incomming data before writing them to file or device"
-msgstr "Filtrer les données envoyées avant de les Ã©crire sur un périphérique ou dans un fichier"
-
-#. frmMain..Panel2..btnFilter..Caption
-#. frmMain..ActionList1..acFilterSelect..Caption
-#. frmMain..Panel2..btnFilter..Caption
+#. frmMain..pnBottom..btnFilter..Caption
 #. frmMain..ActionList1..acFilterSelect..Caption
-#: main.dfm:460
-#: main.dfm:990
-#: test/main.dfm:439
-#: test/main.dfm:968
+#: main.dfm:600
+#: main.dfm:1401
 msgid "&Filter"
 msgstr "&Filtre"
 
-#. frmMain..Panel2..btnProcess..Hint
-#: main.dfm:504
+#. frmMain..pnBottom..btnProcess..Hint
+#: main.dfm:644
 msgid "Start data conversion"
 msgstr "Démarrer la conversion de données"
 
-#. frmMain..Panel2..btnProcess..Caption
+#. frmMain..pnBottom..btnProcess..Caption
 #. frmMain..ActionList1..acConvert..Caption
-#. frmMain..Panel2..btnProcess..Caption
-#. frmMain..ActionList1..acConvert..Caption
-#: main.dfm:507
-#: main.dfm:983
-#: test/main.dfm:485
-#: test/main.dfm:961
+#: main.dfm:647
+#: main.dfm:1394
 msgid "let's go"
 msgstr "Lancer"
 
-#. frmMain..stbMain........Text
-#. frmMain..stbMain........Text
-#: main.dfm:555
-#: test/main.dfm:533
-msgid "http://www.gpsbabel.org (http://sourceforge.net/projects/gpsbabel)"
-msgstr "http://www.gpsbabel.org (http://sourceforge.net/projects/gpsbabel)"
-
-#. frmMain..OpenDialog..Filter
 #. frmMain..OpenDialog..Filter
-#: main.dfm:562
-#: test/main.dfm:540
+#: main.dfm:709
 msgid "Garmin Mapsource mps|*.mps|All files|*.*"
 msgstr "Garmin Mapsource mps|*.mps|Tous les fichiers|*.*"
 
 #. frmMain..SaveDialog..Filter
-#. frmMain..SaveDialog..Filter
-#: main.dfm:568
-#: test/main.dfm:546
+#: main.dfm:715
 msgid "All file(s)|*.*|Garmin MapSource mps|*.mps"
 msgstr "Tous les fichier(s)|*.*|Garmin MapSource mps|*.mps"
 
 #. frmMain..ActionList1..acConvert..Category
 #. frmMain..ActionList1..acFilterSelect..Category
-#. frmMain..ActionList1..acConvert..Category
-#. frmMain..ActionList1..acFilterSelect..Category
-#: main.dfm:982
-#: main.dfm:989
-#: test/main.dfm:960
-#: test/main.dfm:967
+#: main.dfm:1393
+#: main.dfm:1400
 msgid "Babel"
 msgstr "Babel"
 
-#. frmMain..ActionList1..acFileExit..Category
-#. frmMain..ActionList1..acFileExit..Category
-#: main.dfm:995
-#: test/main.dfm:973
-msgid "File"
-msgstr "Fichier"
+#. frmMain..ActionList1..acFilterSelect..Hint
+#: main.dfm:1402
+msgid "Filter incomming data before writing them to file or device"
+msgstr "Filtrer les données envoyées avant de les Ã©crire sur un périphérique ou dans un fichier"
 
 #. frmMain..ActionList1..acFileExit..Caption
-#. frmMain..ActionList1..acFileExit..Caption
-#: main.dfm:996
-#: test/main.dfm:974
+#: main.dfm:1408
 msgid "E&xit"
 msgstr "F&ermer"
 
 #. frmMain..ActionList1..acHelpAbout..Category
 #. frmMain..ActionList1..acHelpIntro..Category
 #. frmMain..ActionList1..acHelpReadme..Category
-#. frmMain..ActionList1..acHelpAbout..Category
-#. frmMain..ActionList1..acHelpIntro..Category
-#. frmMain..ActionList1..acHelpReadme..Category
-#: main.dfm:1001
-#: main.dfm:1006
-#: main.dfm:1010
-#: test/main.dfm:979
-#: test/main.dfm:984
-#: test/main.dfm:988
+#: main.dfm:1412
+#: main.dfm:1417
+#: main.dfm:1421
 msgid "Help"
 msgstr "Aide"
 
 #. frmMain..ActionList1..acHelpAbout..Caption
-#. frmMain..ActionList1..acHelpAbout..Caption
-#: main.dfm:1002
-#: test/main.dfm:980
+#: main.dfm:1413
 msgid "&About"
 msgstr "&A propos"
 
 #. frmMain..ActionList1..acHelpIntro..Caption
-#. frmMain..ActionList1..acHelpIntro..Caption
-#: main.dfm:1007
-#: test/main.dfm:985
+#: main.dfm:1418
 msgid "&Intro"
 msgstr "&Introduction"
 
 #. frmMain..ActionList1..acHelpReadme..Caption
 #. frmReadme..Caption
-#. frmMain..ActionList1..acHelpReadme..Caption
-#. frmReadme..Caption
-#: main.dfm:1011
+#: main.dfm:1422
 #: readme.dfm:6
-#: test/main.dfm:989
-#: test/readme.dfm:6
 msgid "GPSBabel README"
 msgstr "GPSBabel README"
 
+#. frmMain..ActionList1..acOptionsSourceFormat..Caption
+#: main.dfm:1427
+msgid "... for source format"
+msgstr "... pour le format source"
+
+#. frmMain..ActionList1..acOptionsTargetFormat..Caption
+#: main.dfm:1432
+msgid "... for target format"
+msgstr "... pour le format cible"
+
+#. frmMain..ActionList1..acFileClearMemo..Caption
+#: main.dfm:1437
+msgid "Clear output"
+msgstr "Effacer la sortie"
+
+#. frmMain..ActionList1..acFileClearMemo..Hint
+#: main.dfm:1438
+msgid "Clear messages"
+msgstr "Effacer les messages"
+
+#. frmMain..ActionList1..acOptionsEnableCharactersetTransformation..Caption
+#: main.dfm:1446
+msgid "Enable characterset transformation"
+msgstr "Activer la transformation du code de caractères"
+
+#. frmMain..ActionList1..acFileOutputToScreen..Caption
+#: main.dfm:1452
+msgid "Output to screen"
+msgstr "Afficher sur l'écran"
+
+#. frmMain..ActionList1..acFileChangeLanguage..Caption
+#: main.dfm:1464
+msgid "Change language"
+msgstr ""
+
 #. frmMain..MainMenu1..mnuFile..Caption
-#. frmMain..MainMenu1..mnuFile..Caption
-#: main.dfm:1020
-#: test/main.dfm:998
+#: main.dfm:1473
 msgid "&File"
 msgstr "&Fichier"
 
 #. frmMain..MainMenu1..mnuOptions..Caption
-#. frmMain..MainMenu1..mnuOptions..Caption
-#: main.dfm:1026
-#: test/main.dfm:1004
+#: main.dfm:1494
 msgid "&Options"
 msgstr ""
 
 #. frmMain..MainMenu1..mnuOptions..mnuSynthesizeShortNames..Caption
-#. frmMain..MainMenu1..mnuOptions..mnuSynthesizeShortNames..Caption
-#: main.dfm:1028
-#: test/main.dfm:1006
+#: main.dfm:1496
 msgid "Synthesize short names"
 msgstr "Générer les nom courts"
 
 #. frmMain..MainMenu1..mnuOptions..mnuSynthesizeShortNames....Hint
-#. frmMain..MainMenu1..mnuOptions..mnuSynthesizeShortNames....Hint
-#: main.dfm:1031
-#: test/main.dfm:1009
+#: main.dfm:1499
 msgid "Ignore \"short\" names from source data and synthesize them from the long name"
 msgstr "Ingorer les noms  \"courts\"  de la source de données et les générer Ã  partir des noms longs"
 
+#. frmMain..MainMenu1..mnuOptions..mnuOptionsForceDataType..Caption
+#: main.dfm:1503
+msgid "Force selected GPS data types (nuketypes filter)"
+msgstr "Forcer le type de données GPS selctionné (filtre nuketypes)"
+
 #. frmMain..MainMenu1..mnuHelp..Caption
-#. frmMain..MainMenu1..mnuHelp..Caption
-#: main.dfm:1040
-#: test/main.dfm:1018
+#: main.dfm:1538
 msgid "&Help"
 msgstr "&Aide"
 
-#: about.pas:76
-#: test/about.pas:76
-msgid "Version"
-msgstr ""
+#. frmOptions..Caption
+#: options.dfm:5
+msgid "Options for ..."
+msgstr "Options pour ..."
 
-#: about.pas:83
-#: test/about.pas:83
+#: about.pas:87
 msgid "German by Olaf Klein"
 msgstr "Allemand par Olaf Klein"
 
-#: about.pas:84
-#: test/about.pas:84
+#: about.pas:88
 msgid "French by Lilian Morinon"
 msgstr "Français par Lilian Morinon"
 
-#. Programmer's name for it: SGPSBabelURL
-#. Programmer's name for it: SGPSBabelURL
-#: common.pas:27
-#: test/common.pas:27
-msgid "http://www.gpsbabel.org"
-msgstr "http://www.gpsbabel.org"
-
-#: filter.pas:160
-#: test/filter.pas:160
-msgid "Value (%s) out of range (%g to %g)!"
-msgstr "Valeurs (%s) en dehors des limites (%g Ã  %g)!"
+#: about.pas:131
+msgid ""
+"Please have a look at the file README.GUI.\n"
+"\n"
+"There you will find all information you need to\n"
+"get GPSBabelGUI working in your own language."
+msgstr ""
+"Consultez le fichier README.GUI\n"
+"\n"
+"Vous trouverez toutes l'information nécessaire\n"
+"pour faire fonctionner GPSBabelGUI dans votre langue."
 
-#: filter.pas:228
-#: test/filter.pas:228
+#: filter.pas:199
 msgid "Feet"
 msgstr "Pieds"
 
-#: filter.pas:229
-#: test/filter.pas:229
+#: filter.pas:200
 msgid "Meter"
 msgstr "Mètre"
 
-#: filter.pas:232
-#: test/filter.pas:232
+#: filter.pas:203
 msgid "Miles"
 msgstr ""
 
-#: filter.pas:233
-#: test/filter.pas:233
+#: filter.pas:204
 msgid "Kilometer"
 msgstr "Kilomètre"
 
-#: main.pas:181
-#: test/main.pas:181
+#: filter.pas:214
+msgid "Not supported by gpsbabel.exe, release %s!"
+msgstr "Non supporté par GPSBabel, version %s!"
+
+#: filter.pas:250
+msgid "Value (%s) out of range (%g to %g)!"
+msgstr "Valeurs (%s) en dehors des limites (%g Ã  %g)!"
+
+#: filter.pas:530
+#: options.pas:575
+msgid "Discard changes?"
+msgstr "Ne pas tenir compte des changements?"
+
+#: main.pas:238
+msgid "Internal development release"
+msgstr "Version interne"
+
+#: main.pas:240
 msgid "BETA"
 msgstr "BETA"
 
-#: main.pas:183
-#: test/main.pas:183
+#: main.pas:242
 msgid "Private release"
 msgstr "Version privée"
 
-#: main.pas:185
-#: test/main.pas:185
+#: main.pas:244
 msgid "Special release"
 msgstr "Version spéciale"
 
-#: main.pas:283
-#: main.pas:378
-#: test/main.pas:281
-#: test/main.pas:376
+#: main.pas:313
+msgid "The file \"gpsbabel.exe\" found in current directory is too old!"
+msgstr "Le fichier \"gpsbabel.exe\" présent dans le répertoir courant est trop vieux!"
+
+#: main.pas:382
+#: main.pas:510
 msgid "All files|*.*"
 msgstr "Tous les fichiers|*.*"
 
-#: main.pas:420
-#: test/main.pas:417
+#: main.pas:448
+msgid "Select and edit options for \"%s\""
+msgstr "Selctionner et Ã©diter les options pour \"%s\""
+
+#: main.pas:452
+msgid "No options available for \"%s\""
+msgstr "Pas d'option disponible pour \"%s\""
+
+#: main.pas:557
 msgid "File %s not found."
 msgstr "Fichier%s non trouvé."
 
-#: main.pas:441
-#: test/main.pas:438
+#: main.pas:615
 msgid "File \"%s\" exists ! Overwrite ?"
 msgstr "Le fichier \"%s\" existe déjà ! Ecraser ?"
 
-#: main.pas:442
-#: test/main.pas:439
+#: main.pas:616
 msgid "Warning"
 msgstr "Attention"
 
-#: main.pas:471
-#: test/main.pas:468
+#: main.pas:649
 msgid "Could not run \"gpsbabel.exe\"!"
 msgstr "Impossible d'éxécuter \"gpsbabel.exe\"!"
 
-#: main.pas:481
+#: main.pas:658
 msgid "Sorry, gpsbabel.exe reported problems!"
 msgstr "Désolé, GPSBabel a reporté un problème !"
 
-#: main.pas:482
-msgid "Error"
-msgstr "Erreur"
-
-#: main.pas:485
-#: test/main.pas:477
+#: main.pas:660
 msgid "Converted successfully from \"%s\" to \"%s\"."
 msgstr "Conversion de \"%s\" Ã  \"%s\" réussie."
 
-#: main.pas:486
-#: test/main.pas:478
-msgid "Success"
-msgstr "Succès"
+#: main.pas:761
+msgid "GPSBabel, version %s"
+msgstr ""
+
+#: main.pas:795
+#: main.pas:846
+msgid "Port"
+msgstr ""
+
+#: main.pas:937
+msgid "Options for \"%s\""
+msgstr "Options pour \"%s\""
+
+#. override;
+#: options.pas:86
+msgid "Be aware, that most options are made for the output side. "
+msgstr "Attention, la plupart des options sont faites pour le format de sortie."
 
-#: utils.pas:86
-#: test/utils.pas:76
+#: options.pas:87
+msgid "Currently we don't have a flag which tells us which direction is used the options."
+msgstr "Nous n'avons pour l'instant pas de drapeau indiquant dans quelle direction sont utilisées les options."
+
+#: options.pas:145
+msgid "Short \"%s\""
+msgstr "Raccourci \"%s\""
+
+#: options.pas:246
+msgid "Invalid line format!"
+msgstr "Format de ligne invalide"
+
+#: options.pas:267
+msgid "Unknown option \"%s\"!"
+msgstr "Option inconnue \"%s\""
+
+#: utils.pas:108
 msgid "Error WINAPI: Could not create \"NamedPipe\"!"
 msgstr "Erreur WIANPI: Ne peut pas créer \"NamedPipe\"!"
 
-#: utils.pas:91
-#: test/utils.pas:81
+#: utils.pas:113
 msgid "\"gpsbabel.exe\" not found!!!"
 msgstr "\"gpsbabel.exe\" non trouvé!!!"
 
 #. dwCreationFlags,     // creation flags
-#. dwCreationFlags,     // creation flags
-#: utils.pas:110
-#: test/utils.pas:100
+#: utils.pas:132
 msgid "Could not run \"gpsbabel.exe\" (Error %d)!"
 msgstr "Impossible d'éxecuter \"gpsbabel.exe\" (Error %d)!"
 
-#: utils.pas:116
-#: test/utils.pas:106
+#: utils.pas:160
 msgid "\"gpsbabel.exe\" returned error 0x%x (%d)"
 msgstr "\"gpsbabel.exe\" a renvoyé l'erreur 0x%x (%d)"
 
index 0c698756c637e4406ff766e0f64c8c02b5c1a1e5..88c81da4d434c482f55634d2cf45f09f7d5d9461 100644 (file)
Binary files a/gpsbabel/win32/gui-2/main.dfm and b/gpsbabel/win32/gui-2/main.dfm differ
index e7b10eed67aa64439c6bb85c3912257354ca051f..24820b7dc2410092afdc6f3013e64de4ac2059ce 100644 (file)
@@ -21,25 +21,15 @@ unit main;
 interface\r
 \r
 uses\r
-  gnugettextD4,\r
+  TypInfo, gnugettext, gnugettextDx,\r
   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,\r
   StdCtrls, Buttons, ExtCtrls,\r
-  common, utils, ImgList, ActnList, Menus, ComCtrls;\r
+  common, utils, ImgList, ActnList, Menus, ComCtrls, ToolWin;\r
 \r
 type\r
   TfrmMain = class(TForm)\r
-    Panel1: TPanel;\r
-    sbOpenFile: TSpeedButton;\r
-    cbInputFormat: TComboBox;\r
-    cbOutputFormat: TComboBox;\r
-    edOutputFile: TEdit;\r
-    sbSaveFile: TSpeedButton;\r
-    lbInputFile: TLabel;\r
-    lbOutputFile: TLabel;\r
-    lbInputFormat: TLabel;\r
-    lbOutputFormat: TLabel;\r
-    edInputFile: TEdit;\r
-    Panel2: TPanel;\r
+    pnTop: TPanel;\r
+    pnBottom: TPanel;\r
     cbWaypoints: TCheckBox;\r
     cbRoutes: TCheckBox;\r
     cbTracks: TCheckBox;\r
@@ -69,26 +59,62 @@ type
     acHelpIntro: TAction;\r
     Intro1: TMenuItem;\r
     About1: TMenuItem;\r
-    chbInputDevice: TCheckBox;\r
-    cbInputDevice: TComboBox;\r
-    cbInputFormatDevice: TComboBox;\r
-    cbOutputFormatDevice: TComboBox;\r
-    chbOutputDevice: TCheckBox;\r
-    cbOutputDevice: TComboBox;\r
     mnuReadme: TMenuItem;\r
     acHelpReadme: TAction;\r
     N1: TMenuItem;\r
     mnuOptions: TMenuItem;\r
     mnuSynthesizeShortNames: TMenuItem;\r
-    edInputOpts: TEdit;\r
+    Filter1: TMenuItem;\r
+    N2: TMenuItem;\r
+    acOptionsSourceFormat: TAction;\r
+    acOptionsTargetFormat: TAction;\r
+    forsourceformat1: TMenuItem;\r
+    fortargetformat1: TMenuItem;\r
+    acFileClearMemo: TAction;\r
+    N3: TMenuItem;\r
+    Clearoutput1: TMenuItem;\r
+    acFinalizeDropDowns: TAction;\r
+    N4: TMenuItem;\r
+    mnuOptionsForceDataType: TMenuItem;\r
+    acOptionsEnableCharactersetTransformation: TAction;\r
+    Enablecharactersettransformation1: TMenuItem;\r
+    gbInput: TGroupBox;\r
+    sbOpenFile: TSpeedButton;\r
     lbInputOpts: TLabel;\r
+    lbInputFormat: TLabel;\r
+    lbInputFile: TLabel;\r
+    edInputOpts: TComboBox;\r
+    edInputFile: TComboBox;\r
+    chbInputDevice: TCheckBox;\r
+    cbInputLang: TComboBox;\r
+    cbInputFormatDevice: TComboBox;\r
+    cbInputFormat: TComboBox;\r
+    cbInputDevice: TComboBox;\r
+    btnInputOpts: TSpeedButton;\r
+    gbOutput: TGroupBox;\r
+    cbOutputFormatDevice: TComboBox;\r
+    chbOutputDevice: TCheckBox;\r
     lbOutputOpts: TLabel;\r
-    edOutputOpts: TEdit;\r
-    Filter1: TMenuItem;\r
+    edOutputOpts: TComboBox;\r
+    btnOutputOpts: TSpeedButton;\r
+    lbOutputFormat: TLabel;\r
+    cbOutputFormat: TComboBox;\r
+    lbOutputFile: TLabel;\r
+    edOutputFile: TComboBox;\r
+    sbSaveFile: TSpeedButton;\r
+    cbOutputLang: TComboBox;\r
+    cbOutputDevice: TComboBox;\r
+    acFileOutputToScreen: TAction;\r
+    Outputtoscreen1: TMenuItem;\r
+    acDebugCreatePo: TAction;\r
+    mnuDebug: TMenuItem;\r
+    Createoptionspo1: TMenuItem;\r
+    acFileChangeLanguage: TAction;\r
+    Changelanguage1: TMenuItem;\r
+    N5: TMenuItem;\r
     procedure FormShow(Sender: TObject);\r
     procedure FormCreate(Sender: TObject);\r
     procedure OpenButtonClick(Sender: TObject);\r
-    procedure ComboChange(Sender: TObject);\r
     procedure edInputFileChange(Sender: TObject);\r
     procedure CheckInput;\r
     procedure edOutputFileChange(Sender: TObject);\r
@@ -107,16 +133,41 @@ type
     procedure acHelpReadmeExecute(Sender: TObject);\r
     procedure mnuSynthesizeShortNamesClick(Sender: TObject);\r
     procedure edOutputFileKeyPress(Sender: TObject; var Key: Char);\r
+    procedure cbInputFormatDeviceChange(Sender: TObject);\r
+    procedure cbOutputFormatDeviceChange(Sender: TObject);\r
+    procedure cbInputFormatChange(Sender: TObject);\r
+    procedure cbOutputFormatChange(Sender: TObject);\r
+    procedure acOptionsSourceFormatExecute(Sender: TObject);\r
+    procedure acOptionsTargetFormatExecute(Sender: TObject);\r
+    procedure btnInputOptsClick(Sender: TObject);\r
+    procedure acFileClearMemoExecute(Sender: TObject);\r
+    procedure acFinalizeDropDownsExecute(Sender: TObject);\r
+    procedure mnuOptionsForceDataTypeClick(Sender: TObject);\r
+    procedure acOptionsEnableCharactersetTransformationExecute(\r
+      Sender: TObject);\r
+    procedure acFileOutputToScreenExecute(Sender: TObject);\r
+    procedure acDebugCreatePoExecute(Sender: TObject);\r
+    procedure acFileChangeLanguageExecute(Sender: TObject);\r
   private\r
     { Private-Deklarationen }\r
     FCaps: TCapabilities;\r
+    FOpts: TOptions;\r
+    FLang: TStringList;\r
     FFirstShow: Boolean;\r
     FOutHandmade: Boolean;\r
     procedure AddToOutput(const Str: string);\r
     procedure AddToOutputFmt(const Format: string; const Args: array of const);\r
-    procedure InitCombo(Target: TComboBox; ForRead, ForDevice: Boolean);\r
+    procedure ComboBoxChanged(const Format: string; IsInput, IsFile: Boolean);\r
+    procedure DoOnIdle(Sender: TObject; var Done: Boolean);\r
+    procedure EnableOptions(const Version: string);\r
+    function HandleOptions(const Format: string; AObject: TObject; IsInput: Boolean): Boolean;\r
+    function HandleOptionsDlg(const Format: string; var str: string; IsInput: Boolean): Boolean;\r
+    procedure HistoryChanged(Box: TComboBox; Swap: Boolean = False);\r
+    procedure InitCombo(Target: TComboBox; IsInput, ForDevice: Boolean);\r
+    procedure LoadLanguages;\r
     procedure LoadFileFormats;\r
     procedure LoadVersion;\r
+    procedure WMOPTIONSCHANGED(var Msg: TMessage); message WM_OPTIONS_CHANGED;\r
     procedure WMSTARTUP(var Msg: TMessage); message WM_STARTUP;\r
     procedure StoreProfiles;\r
   public\r
@@ -128,7 +179,8 @@ var
 \r
 implementation\r
 \r
-uses filter, about, readme;\r
+uses\r
+  filter, about, readme, options;\r
 \r
 {$R *.DFM}\r
 \r
@@ -160,10 +212,15 @@ end;
 { TfrmMain }\r
 \r
 procedure TfrmMain.FormCreate(Sender: TObject);\r
-var\r
-  s: string;\r
 begin\r
-  gnugettextD4.TranslateComponent(SELF);\r
+  TP_Ignore(mnuDebug, 'mnuDebug');\r
+{$IFOPT D-}\r
+  mnuDebug.Visible := False;\r
+{$ENDIF}\r
+  TranslateComponent(SELF);\r
+  LoadLanguages;\r
+\r
+  FFirstShow := True;\r
 \r
 // VS_FF_DEBUG The file contains debugging information or is compiled with debugging features enabled.\r
 // VS_FF_INFOINFERRED  The file's version structure was created dynamically;\r
@@ -177,15 +234,19 @@ begin
 //                      but is a variation of the normal file of the same version number.\r
 //                      If this flag is set, the StringFileInfo structure should contain a SpecialBuild\r
 \r
-  if (CFixedFileinfo.dwFileFlags and VS_FF_PRERELEASE <> 0) then\r
+  if (CFixedFileinfo.dwFileFlags and VS_FF_DEBUG <> 0) then\r
+    Caption := Format('%s (%s)', [Caption, _('Internal development release')])\r
+  else if (CFixedFileinfo.dwFileFlags and VS_FF_PRERELEASE <> 0) then\r
     Caption := Format('%s (%s)', [Caption, _('BETA')])\r
   else if (CFixedFileinfo.dwFileFlags and VS_FF_PRIVATEBUILD <> 0) then\r
     Caption := Format('%s (%s)', [Caption, _('Private release')])\r
   else if (CFixedFileinfo.dwFileFlags and VS_FF_SPECIALBUILD <> 0) then\r
     Caption := Format('%s (%s)', [Caption, _('Special release')]);\r
 \r
+  memoOutput.Lines.Clear;\r
 \r
   FCaps := TCapabilities.Create;\r
+  FOpts := TOptions.Create(FCaps);\r
 \r
   OpenDialog.InitialDir := ReadProfile(OpenDialog.Tag);\r
   SaveDialog.InitialDir := ReadProfile(SaveDialog.Tag);\r
@@ -196,20 +257,45 @@ begin
   if not ComboBoxSelect(cbOutputDevice, ReadProfile(cbOutputDevice.Tag)) then\r
     cbOutputDevice.ItemIndex := 0;\r
 \r
-  FFirstShow := True;\r
-\r
   FixAlign(sbOpenFile, 8);\r
   FixAlign(sbSaveFile, 8);\r
-  edInputOpts.Left := lbInputOpts.Left + lbInputOpts.Width + 8;\r
-  edOutputOpts.Left := lbOutputOpts.Left + lbOutputOpts.Width + 8;\r
-  FixAlign(edInputOpts, 8);\r
-  FixAlign(edOutputOpts, 8);\r
-  FixAlign(btnProcess, 8);\r
-  FixAlign(btnFilter, 16, btnProcess);\r
   FixAlign(edInputFile, 8, sbOpenFile);\r
   FixAlign(edOutputFile, 8, sbSaveFile);\r
 \r
+  FixAlign(cbInputLang, 8);\r
+  btnInputOpts.Left := lbInputOpts.Left + lbInputOpts.Width + 8;\r
+  edInputOpts.Left := btnInputOpts.Left + btnInputOpts.Width + 4;\r
+  edInputOpts.Width := cbInputLang.Left - edInputOpts.Left - 4;\r
+\r
+  FixAlign(cbOutputLang, 8);\r
+  btnOutputOpts.Left := lbOutputOpts.Left + lbOutputOpts.Width + 8;\r
+  edOutputOpts.Left := btnOutputOpts.Left + btnOutputOpts.Width + 4;\r
+  edOutputOpts.Width := cbOutputLang.Left - edOutputOpts.Left - 4;\r
+\r
+  FixAlign(btnProcess, 8);\r
+  FixAlign(btnFilter, 16, btnProcess);\r
+\r
   edInputFile.Text := ReadProfile(edInputFile.Tag);\r
+\r
+  cbInputLang.ItemIndex := 0;\r
+  cbOutputLang.ItemIndex := 0;\r
+\r
+  Application.OnIdle := Self.DoOnIdle;\r
+\r
+  gbInput.Caption := '>>> ' + _('Input');\r
+  gbOutput.Caption := '<<< ' + _('Output');\r
+\r
+  chbInputDevice.Caption := '[' + chbInputDevice.Caption + ']';\r
+  chbOutputDevice.Caption := '[' + chbOutputDevice.Caption + ']';\r
+end;\r
+\r
+procedure TfrmMain.LoadLanguages;\r
+begin\r
+  FLang := TStringList.Create;\r
+\r
+  DefaultInstance.GetListOfLanguages('default', FLang);\r
+  if (FLang.IndexOf('en') < 0) then FLang.Add('en');\r
+  acFileChangeLanguage.Visible := (FLang.Count > 1);\r
 end;\r
 \r
 procedure TfrmMain.LoadFileFormats;\r
@@ -218,12 +304,23 @@ var
 begin\r
   l := TStringList.Create;\r
   try\r
-    gpsbabel('-^2', l);\r
+\r
+    if (gpsbabel_vfmt >= '001.002.008') then\r
+      gpsbabel('-^3', l)\r
+    else if (gpsbabel_vfmt >= '001.002.005') then\r
+      gpsbabel('-^2', l)\r
+    else begin\r
+      MessageDlg(_('The file "gpsbabel.exe" found in current directory is too old!'),\r
+        mtError, [mbOK], 0);\r
+      Halt(1);\r
+    end;\r
+\r
     FCaps.List := l;\r
-    InitCombo(cbInputFormat, True, False);\r
-    InitCombo(cbOutputFormat, False, False);\r
+    FOpts.List := l;\r
     InitCombo(cbInputFormatDevice, False, True);\r
     InitCombo(cbOutputFormatDevice, True, True);\r
+    InitCombo(cbInputFormat, True, False);\r
+    InitCombo(cbOutputFormat, False, False);\r
   finally\r
     l.Free;\r
   end;\r
@@ -232,6 +329,7 @@ end;
 procedure TfrmMain.FormShow(Sender: TObject);\r
 begin\r
   if not(FFirstShow) then Exit;\r
+  \r
   FFirstShow := False;\r
   PostMessage(SELF.Handle, WM_STARTUP, 0, 0); // keep sure our window is visible\r
 end;\r
@@ -239,6 +337,7 @@ end;
 procedure TfrmMain.WMSTARTUP(var Msg: TMessage);\r
 begin\r
   LoadVersion;\r
+  EnableOptions(gpsbabel_vfmt);\r
   LoadFileFormats;\r
 \r
   // ? valid README form\r
@@ -246,7 +345,7 @@ begin
   acHelpReadme.Enabled := (frmReadme.Memo.Lines.Count > 0);\r
 end;\r
 \r
-procedure TfrmMain.InitCombo(Target: TComboBox; ForRead, ForDevice: Boolean);\r
+procedure TfrmMain.InitCombo(Target: TComboBox; IsInput, ForDevice: Boolean);\r
 var\r
   i: Integer;\r
   OK: Boolean;\r
@@ -257,7 +356,7 @@ begin
     if (ForDevice and not(FCaps.IsDevice(i))) then Continue;\r
     if not(ForDevice) and not FCaps.IsFile(i) then Continue;\r
 \r
-    if (ForRead) then\r
+    if (IsInput) then\r
       OK := FCaps.CanReadAny(i)\r
     else\r
       OK := FCaps.CanWriteAny(i);\r
@@ -268,7 +367,7 @@ begin
   s := ReadProfile(Target.Tag);\r
   ComboBoxSelect(Target, s);\r
 \r
-  ComboChange(Target);\r
+  ComboBoxChanged(Target.Text, IsInput, not(ForDevice));\r
 end;\r
 \r
 procedure TfrmMain.OpenButtonClick(Sender: TObject);\r
@@ -286,22 +385,24 @@ begin
   if not SELF.OpenDialog.Execute then Exit;\r
 \r
   edInputFile.Text := OpenDialog.FileName;\r
+  CheckInput;\r
 end;\r
 \r
-procedure TfrmMain.ComboChange(Sender: TObject);\r
+procedure TfrmMain.ComboBoxChanged(const Format: string; IsInput, IsFile: Boolean);\r
 var\r
   caps: Integer;\r
   ext: string;\r
+  ac: TAction;\r
 begin\r
-  caps := FCaps.GetCaps(TComboBox(Sender).Text);\r
-  ext := FCaps.GetExt(TComboBox(Sender).Text);\r
-  if FOutHandmade and (ext = '') then\r
+  caps := FCaps.GetCaps(Format);\r
+  ext := FCaps.GetExt(Format);\r
+  if IsFile and FOutHandmade and (ext = '') then\r
   begin\r
     ext := SysUtils.ExtractFileExt(edOutputFile.Text);\r
     if (ext <> '') and (ext[1] = '.') then Delete(ext, 1, 1);\r
   end;\r
 \r
-  if (Sender = cbInputFormat) then\r
+  if IsInput then\r
   begin\r
     wptInputOK.Enabled := (caps and 1 <> 0);\r
     trkInputOK.Enabled := (caps and 4 <> 0);\r
@@ -312,13 +413,44 @@ begin
     wptOutputOK.Enabled := (caps and 2 <> 0);\r
     trkOutputOK.Enabled := (caps and 8 <> 0);\r
     rteOutputOK.Enabled := (caps and 32 <> 0);\r
-    if (edOutputFile.Text <> '') then\r
+    if IsFile and (edOutputFile.Text <> '') and (edOutputFile.Text <> '-') then\r
     begin\r
       if (ext <> '') then FOutHandmade := False;\r
       edOutputFile.Text := SysUtils.ChangeFileExt(edOutputFile.Text, '.' + ext);\r
     end;\r
   end;\r
+\r
   CheckInput;\r
+\r
+  if IsInput then\r
+  begin\r
+    edInputOpts.Text := '';\r
+    edInputOpts.Items.Clear;\r
+    \r
+    ac := acOptionsSourceFormat;\r
+    acOptionsSourceFormat.Caption := _('Input') + ': ' + Format;\r
+    btnInputOpts.Caption := '';\r
+//  ImageList1.GetBitmap(11, btnInputOpts.Glyph);\r
+  end\r
+  else begin\r
+    edOutputOpts.Text := '';\r
+    edOutputOpts.Items.Clear;\r
+\r
+    ac := acOptionsTargetFormat;\r
+    acOptionsTargetFormat.Caption := _('Output') + ': ' + Format;\r
+    btnOutputOpts.Caption := '';\r
+//  ImageList1.GetBitmap(11, btnOutputOpts.Glyph);\r
+  end;\r
+\r
+  ac.Enabled := FOpts.HasFormatOpts(Format);\r
+  if ac.Enabled then\r
+  begin\r
+    ac.Hint := SysUtils.Format(_('Select and edit options for "%s"'), [Format]);\r
+  end\r
+    else\r
+  begin\r
+    ac.Hint := SysUtils.Format(_('No options available for "%s"'), [Format]);\r
+  end;\r
 end;\r
 \r
 procedure TfrmMain.edInputFileChange(Sender: TObject);\r
@@ -381,6 +513,7 @@ begin
   if not SELF.SaveDialog.Execute then Exit;\r
 \r
   edOutputFile.Text := SaveDialog.FileName;\r
+  CheckInput;\r
 end;\r
 \r
 procedure TfrmMain.acConvertExecute(Sender: TObject);\r
@@ -395,101 +528,147 @@ var
   Fatal: Boolean;\r
 \r
 begin\r
-  cmdline := '';\r
+  btnProcess.Enabled := False;\r
+  try\r
+    acFinalizeDropDownsExecute(nil);\r
 \r
-  if chbInputDevice.Checked then\r
-    IFormat := FCaps.GetName(cbInputFormatDevice.Text)\r
-  else\r
-    IFormat := FCaps.GetName(cbInputFormat.Text);\r
-  if chbOutputDevice.Checked then\r
-    OFormat := FCaps.GetName(cbOutputFormatDevice.Text)\r
-  else\r
-    OFormat := FCaps.GetName(cbOutputFormat.Text);\r
+    cmdline := '';\r
 \r
-  if cbWaypoints.Checked then cmdline := cmdline + ' -w';\r
-  if cbRoutes.Checked then cmdline := cmdline + ' -r';\r
-  if cbTracks.Checked then cmdline := cmdline + ' -t';\r
+    if chbInputDevice.Checked then\r
+      IFormat := FCaps.GetName(cbInputFormatDevice.Text)\r
+    else\r
+      IFormat := FCaps.GetName(cbInputFormat.Text);\r
+    if chbOutputDevice.Checked then\r
+      OFormat := FCaps.GetName(cbOutputFormatDevice.Text)\r
+    else\r
+      OFormat := FCaps.GetName(cbOutputFormat.Text);\r
 \r
-  if mnuSynthesizeShortNames.Checked then cmdline := cmdline + ' -s';\r
+    if cbWaypoints.Checked then cmdline := cmdline + ' -w';\r
+    if cbRoutes.Checked then cmdline := cmdline + ' -r';\r
+    if cbTracks.Checked then cmdline := cmdline + ' -t';\r
 \r
-  if chbInputDevice.Checked then\r
-    s := SysUtils.AnsiLowerCase(cbInputDevice.Text) + ':'\r
-  else begin\r
-    s := edInputFile.Text;\r
-    if not(FileExists(s)) then\r
-    raise eGPSBabelError.CreateFmt(_('File %s not found.'), [s]);\r
-    s := '"' + s + '"';\r
-  end;\r
+    if mnuSynthesizeShortNames.Checked then cmdline := cmdline + ' -s';\r
 \r
-  if (Trim(edInputOpts.Text) <> '') then\r
-    cmdline := Format('%s -i %s,%s -f %s',\r
-      [cmdline, IFormat, Trim(edInputOpts.Text), s])\r
-  else\r
-    cmdline := Format('%s -i %s -f %s',\r
-      [cmdline, IFormat, s]);\r
+    if chbInputDevice.Checked then\r
+      s := SysUtils.AnsiLowerCase(cbInputDevice.Text) + ':'\r
+    else begin\r
+      s := edInputFile.Text;\r
+      if not(FileExists(s)) then\r
+      raise eGPSBabelError.CreateFmt(_('File %s not found.'), [s]);\r
+      s := '"' + s + '"';\r
+    end;\r
 \r
-  cmdline := cmdline + frmFilter.CmdLine;\r
+    // Input character set\r
 \r
-  if (chbOutputDevice.Checked) then\r
-    s := cbOutputDevice.Text + ':'\r
-  else begin\r
-    s := edOutputFile.Text;\r
+    if acOptionsEnableCharactersetTransformation.Checked and\r
+       (cbInputLang.ItemIndex > 0) then\r
+      cmdline := Format('%s -c %s',\r
+        [cmdline, cbInputLang.Text]);\r
 \r
-    if FileExists(s) then\r
-    begin\r
-      if (Windows.MessageBox(SELF.Handle,\r
-        PChar(Format(_('File "%s" exists ! Overwrite ?'), [s])),\r
-        PChar(_('Warning')), MB_YESNO) <> IDYES) then Exit;\r
-    end\r
-      else\r
+    if (Trim(edInputOpts.Text) <> '') then\r
+      cmdline := Format('%s -i %s,%s -f %s',\r
+        [cmdline, IFormat, Trim(edInputOpts.Text), s])\r
+    else\r
+      cmdline := Format('%s -i %s -f %s',\r
+        [cmdline, IFormat, s]);\r
+\r
+    if mnuOptionsForceDataType.Checked then\r
     begin\r
-      str := TFileStream.Create(s, fmCreate);\r
-      str.Free;\r
+      s := '';\r
+      if not(cbWaypoints.Checked) then\r
+        s := s + ',waypoints'; \r
+      if not(cbRoutes.Checked) then\r
+        s := s + ',routes';\r
+      if not(cbTracks.Checked) then\r
+        s := s + ',tracks';\r
+      if (s <> '') then\r
+        cmdline := Format('%s -x nuketypes%s', [cmdline, s]);\r
     end;\r
-    s := '"' + s + '"';\r
-  end;\r
 \r
-  if (Trim(edOutputOpts.Text) <> '') then\r
-    cmdline := Format('%s -o %s,%s -F %s',\r
-      [cmdline, OFormat, Trim(edOutputOpts.Text), s])\r
-  else\r
-    cmdline := Format('%s -o %s -F %s',\r
-      [cmdline, OFormat, s]);\r
-\r
-  while (cmdline[1] = ' ') do System.Delete(cmdline, 1, 1);\r
+    // Add filter options\r
 \r
-  AddToOutput('gpsbabel.exe ' + cmdline);\r
+    if (frmFilter <> nil) then\r
+      cmdline := cmdline + frmFilter.CmdLine;\r
 \r
-  list := TStringList.Create;\r
-  try\r
-    CSave := Cursor;\r
-    Cursor := crHourGlass;\r
-    Application.ProcessMessages;\r
-    Sleep(50);\r
+    // Output character set\r
 \r
-    if not gpsbabel(cmdline, list, @Fatal) then\r
-      raise eGPSBabelError.Create(_('Could not run "gpsbabel.exe"!'));\r
+    if acOptionsEnableCharactersetTransformation.Checked and\r
+       (cbOutputLang.ItemIndex > 0) then\r
+      cmdline := Format('%s -c %s',\r
+        [cmdline, cbOutputLang.Text]);\r
 \r
-    if (list.Count > 0) then\r
+    if (chbOutputDevice.Checked) then\r
     begin\r
-      AddToOutput('');\r
-      AddToOutput(string(list.GetText));\r
+      if (cbOutputDevice.Text = 'SCREEN') then\r
+        s := '-'\r
+      else\r
+        s := cbOutputDevice.Text + ':'\r
+    end\r
+    else begin\r
+      s := edOutputFile.Text;\r
+\r
+      if (s <> '-') then\r
+      begin\r
+        if FileExists(s) then\r
+        begin\r
+          if (Windows.MessageBox(SELF.Handle,\r
+            PChar(Format(_('File "%s" exists ! Overwrite ?'), [s])),\r
+            PChar(_('Warning')), MB_YESNO) <> IDYES) then Exit;\r
+        end\r
+          else\r
+        begin\r
+          str := TFileStream.Create(s, fmCreate);\r
+          str.Free;\r
+        end;\r
+        s := '"' + s + '"';\r
+      end\r
+      else\r
+        s := '-';\r
     end;\r
 \r
-    if (Fatal) then\r
-      MessageBox(SELF.Handle,\r
-        PChar(_('Sorry, gpsbabel.exe reported problems!')),\r
-        PChar(_('Error')), MB_OK)\r
+    if (Trim(edOutputOpts.Text) <> '') then\r
+      cmdline := Format('%s -o %s,%s -F %s',\r
+        [cmdline, OFormat, Trim(edOutputOpts.Text), s])\r
     else\r
-      MessageBox(SELF.Handle,\r
-        PChar(Format(_('Converted successfully from "%s" to "%s".'), [IFormat, OFormat])),\r
-        PChar(_('Success')), MB_OK);\r
+      cmdline := Format('%s -o %s -F %s',\r
+        [cmdline, OFormat, s]);\r
 \r
-  finally\r
+    while (cmdline[1] = ' ') do System.Delete(cmdline, 1, 1);\r
+\r
+    s := 'gpsbabel.exe ' + cmdline;\r
+    AddToOutput(s);\r
 \r
-    Cursor := CSave;\r
-    list.Free;\r
+    list := TStringList.Create;\r
+    try\r
+      CSave := Cursor;\r
+      Cursor := crHourGlass;\r
+      Application.ProcessMessages;\r
+      Sleep(50);\r
 \r
+      if not gpsbabel(cmdline, list, @Fatal, False) then\r
+        raise eGPSBabelError.Create(_('Could not run "gpsbabel.exe"!'));\r
+\r
+      if (list.Count > 0) then\r
+      begin\r
+        AddToOutput('');\r
+        AddToOutput(string(list.GetText));\r
+      end;\r
+\r
+      if (Fatal) then\r
+        MessageDlg(_('Sorry, gpsbabel.exe reported problems!'), mtError, [mbOK], 0)\r
+      else\r
+        MessageDlg(Format(_('Converted successfully from "%s" to "%s".'), [IFormat, OFormat]),\r
+          mtInformation, [mbOK], 0);\r
+\r
+    finally\r
+\r
+      Cursor := CSave;\r
+      list.Free;\r
+\r
+    end;\r
+\r
+  finally\r
+    btnProcess.Enabled := True;\r
   end;\r
 end;\r
 \r
@@ -500,6 +679,8 @@ end;
 \r
 procedure TfrmMain.acFilterSelectExecute(Sender: TObject);\r
 begin\r
+  if (frmFilter = nil) then\r
+    Application.CreateForm(TfrmFilter, frmFilter);\r
   if not(frmFilter.ShowModal = mrOk) then Exit;\r
 end;\r
 \r
@@ -521,10 +702,35 @@ end;
 \r
 procedure TfrmMain.LoadVersion;\r
 var\r
-  l: TStrings;\r
+  l, l2: TStringList;\r
   i: Integer;\r
   s: string;\r
+  cx: PChar;\r
+  \r
+  procedure SpaceDelimited(const str: string; list: TStrings);\r
+  var\r
+    s: string;\r
+    cin, cend, cx: PChar;\r
+  begin\r
+    s := Trim(str);\r
+    cin := PChar(s);\r
+    cend := cin + StrLen(cin);\r
+    while (cin < cend) do\r
+    begin\r
+      while (cin^ = ' ') do cin := cin + 1;\r
+      cx := StrScan(cin, ' ');\r
+      if (cx = nil) then cx := cend;\r
+      cx^ := #0;\r
+      list.Add(string(cin));\r
+      cin := cx + 1;\r
+    end;\r
+  end;\r
+\r
 begin\r
+  gpsbabel_major := 0;\r
+  gpsbabel_minor := 0;\r
+  gpsbabel_release := 0;\r
+  \r
   l := TStringList.Create;\r
   try\r
     if not gpsbabel('-V', l) then Exit;\r
@@ -534,9 +740,32 @@ begin
       s := Trim(l.Strings[i]);\r
       if (Copy(AnsiUpperCase(s), 1, 8) = 'GPSBABEL') then\r
       begin\r
-        stbMain.Panels[0].Text := s;\r
-        stbMain.Panels[0].Width := stbMain.Canvas.TextWidth(s) +\r
-          Trunc((Length(s)* 1.5));\r
+        l2 := TStringList.Create;\r
+        try\r
+          SpaceDelimited(s, l2);\r
+          gpsbabel_version := l2[2];\r
+          cx := PChar(gpsbabel_version);\r
+          gpsbabel_major := atoi(cx);\r
+          cx := StrScan(cx, '.');\r
+          if (cx <> nil) then\r
+          begin\r
+            gpsbabel_minor := atoi(cx + 1);\r
+            cx := StrScan(cx + 1, '.');\r
+            if (cx <> nil) then\r
+              gpsbabel_release := atoi(cx + 1);\r
+          end;\r
+\r
+          gpsbabel_vfmt := Format('%3.3d.%3.3d.%3.3d', [\r
+            gpsbabel_major, gpsbabel_minor, gpsbabel_release]);\r
+\r
+          s := Format(_('GPSBabel, version %s'), [gpsbabel_version]);\r
+          stbMain.Panels[0].Text := s;\r
+          stbMain.Panels[0].Width := stbMain.Canvas.TextWidth(s) +\r
+            Trunc((Length(s)* 1.5));\r
+          Break;\r
+        finally\r
+          l2.Free;\r
+        end;\r
       end;\r
     end;\r
 \r
@@ -547,6 +776,8 @@ end;
 \r
 procedure TfrmMain.acHelpAboutExecute(Sender: TObject);\r
 begin\r
+  if (frmAbout = nil) then\r
+    Application.CreateForm(TfrmAbout, frmAbout);\r
   frmAbout.ShowModal;\r
 end;\r
 \r
@@ -558,15 +789,20 @@ begin
   begin\r
     edInputFile.Visible := False;\r
     sbOpenFile.Visible := False;\r
+    cbInputFormat.Visible := False;\r
     cbInputDevice.Visible := True;\r
     cbInputFormatDevice.Visible := True;\r
+    lbInputFile.Caption := _('Port');\r
   end\r
     else\r
   begin\r
+    cbInputFormat.Visible := True;\r
     cbInputFormatDevice.Visible := False;\r
     cbInputDevice.Visible := False;\r
     edInputFile.Visible := True;\r
+    cbInputDevice.Visible := False;\r
     sbOpenFile.Visible := True;\r
+    lbInputFile.Caption := _('File');\r
   end;\r
   CheckInput;\r
 end;\r
@@ -602,17 +838,21 @@ begin
 \r
   if TCheckBox(Sender).Checked then\r
   begin\r
-    edOutputFile.Visible := False;\r
-    sbSaveFile.Visible := False;\r
     cbOutputFormatDevice.Visible := True;\r
     cbOutputDevice.Visible := True;\r
+    edOutputFile.Visible := False;\r
+    sbSaveFile.Visible := False;\r
+    cbOutputFormat.Visible := False;\r
+    lbOutputFile.Caption := _('Port');\r
   end\r
     else\r
   begin\r
-    cbOutputDevice.Visible := False;\r
-    cbOutputFormatDevice.Visible := False;\r
+    cbOutputFormat.Visible := True;\r
     sbSaveFile.Visible := True;\r
     edOutputFile.Visible := True;\r
+   cbOutputDevice.Visible := False;\r
+    cbOutputFormatDevice.Visible := False;\r
+    lbOutputFile.Caption := _('File');\r
   end;\r
   CheckInput;\r
 end;\r
@@ -632,5 +872,238 @@ begin
   FOutHandmade := True;\r
 end;\r
 \r
+procedure TfrmMain.cbInputFormatDeviceChange(Sender: TObject);\r
+begin\r
+  ComboBoxChanged(cbInputFormatDevice.Text, True, False);\r
+end;\r
+\r
+procedure TfrmMain.cbOutputFormatDeviceChange(Sender: TObject);\r
+begin\r
+  ComboBoxChanged(cbOutputFormatDevice.Text, False, False);\r
+end;\r
+\r
+procedure TfrmMain.cbInputFormatChange(Sender: TObject);\r
+begin\r
+  ComboBoxChanged(cbInputFormat.Text, True, True);\r
+end;\r
+\r
+procedure TfrmMain.cbOutputFormatChange(Sender: TObject);\r
+begin\r
+  ComboBoxChanged(cbOutputFormat.Text, False, True);\r
+end;\r
+\r
+procedure TfrmMain.acOptionsSourceFormatExecute(Sender: TObject);\r
+begin\r
+  if chbInputDevice.Checked then\r
+    HandleOptions(cbInputFormatDevice.Text, edInputOpts, True)\r
+  else\r
+    HandleOptions(cbInputFormat.Text, edInputOpts, True)\r
+end;\r
+\r
+procedure TfrmMain.DoOnIdle(Sender: TObject; var Done: Boolean);\r
+begin\r
+  inherited;\r
+  acFileClearMemo.Enabled := (memoOutput.Lines.Count > 0);\r
+  Done := True;\r
+end;\r
+\r
+procedure TfrmMain.EnableOptions(const Version: string);\r
+begin\r
+    if (Version >= '001.002.008') then\r
+      mnuOptionsForceDataType.Enabled := True;\r
+    if (version >= '001.002.007') then\r
+      acOptionsEnableCharactersetTransformation.Enabled := True;\r
+end;\r
+\r
+function TfrmMain.HandleOptions(const Format: string; AObject: TObject; IsInput: Boolean): Boolean;\r
+var\r
+  s: string;\r
+  ok: Boolean;\r
+begin\r
+  s := GetStrProp(AObject, 'Text');\r
+  if HandleOptionsDlg(Format, s, IsInput) then\r
+  begin\r
+    SetStrProp(AObject, 'Text', s);\r
+    Result := True;\r
+  end\r
+  else\r
+    Result := False;\r
+end;\r
+\r
+function TfrmMain.HandleOptionsDlg(const Format: string; var str: string; IsInput: Boolean): Boolean;\r
+begin\r
+  Application.CreateForm(TfrmOptions, frmOptions);\r
+  try\r
+    frmOptions.Caption := SysUtils.Format(_('Options for "%s"'), [Format]);\r
+    frmOptions.FIsInput := IsInput;\r
+    frmOptions.Opts := FOpts.FormatOpts(Format);\r
+    frmOptions.OptsStr := str;\r
+    Result := (frmOptions.ShowModal = mrOk);\r
+    if (Result) then\r
+    begin\r
+      str := frmOptions.OptsStr;\r
+      PostMessage(Self.Handle, WM_OPTIONS_CHANGED, 0, 0);\r
+    end;\r
+  finally\r
+    frmOptions.Release;\r
+  end;\r
+end;\r
+\r
+procedure TfrmMain.acOptionsTargetFormatExecute(Sender: TObject);\r
+begin\r
+  if chbOutputDevice.Checked then\r
+    HandleOptions(cbOutputFormatDevice.Text, edOutputOpts, False)\r
+  else\r
+    HandleOptions(cbOutputFormat.Text, edOutputOpts, False);\r
+end;\r
+\r
+procedure TfrmMain.btnInputOptsClick(Sender: TObject);\r
+begin\r
+  acOptionsSourceFormat.Execute;\r
+end;\r
+\r
+procedure TfrmMain.acFileClearMemoExecute(Sender: TObject);\r
+begin\r
+  memoOutput.Clear;\r
+end;\r
+\r
+procedure TfrmMain.acFinalizeDropDownsExecute(Sender: TObject);\r
+var\r
+ i, j: Integer;\r
+ c: TComponent;\r
+ cb: TComboBox;\r
+begin\r
+  for i := 0 to ComponentCount - 1 do\r
+  begin\r
+    c := Components[i];\r
+    if not(c is TComboBox) then Continue;\r
+    cb := Pointer(c);\r
+    if (cb.Style <> csDropDown) or (cb.Text = '') then Continue;\r
+    j := cb.Items.IndexOf(cb.Text);\r
+    if (j < 0) then\r
+      cb.Items.Insert(0, cb.Text);\r
+  end;\r
+end;\r
+\r
+procedure TfrmMain.WMOPTIONSCHANGED(var Msg: TMessage);\r
+begin\r
+  acFinalizeDropDowns.Execute;\r
+end;\r
+\r
+procedure TfrmMain.mnuOptionsForceDataTypeClick(Sender: TObject);\r
+begin\r
+  mnuOptionsForceDataType.Checked := not(mnuOptionsForceDataType.Checked);\r
+end;\r
+\r
+procedure TfrmMain.acOptionsEnableCharactersetTransformationExecute(\r
+  Sender: TObject);\r
+begin\r
+  acOptionsEnableCharactersetTransformation.Checked := not (\r
+    acOptionsEnableCharactersetTransformation.Checked);\r
+\r
+  cbInputLang.Enabled := acOptionsEnableCharactersetTransformation.Checked;\r
+  cbOutputLang.Enabled := acOptionsEnableCharactersetTransformation.Checked;\r
+end;\r
+\r
+procedure TfrmMain.acFileOutputToScreenExecute(Sender: TObject);\r
+begin\r
+  if (chbOutputDevice.Checked) then\r
+  begin\r
+    chbOutputDevice.Checked := False;\r
+    chbOutputDeviceClick(chbOutputDevice);\r
+    Application.ProcessMessages;\r
+  end;\r
+\r
+  acFileOutputToScreen.Checked := not (acFileOutputToScreen.Checked);\r
+  if acFileOutputToScreen.Checked then\r
+  begin\r
+    chbOutputDevice.Enabled := False;\r
+    HistoryChanged(edOutputFile);\r
+    edOutputFile.Text := '-';\r
+    edOutputFile.Enabled := False;\r
+    sbSaveFile.Enabled := False;\r
+  end\r
+    else\r
+  begin\r
+    chbOutputDevice.Enabled := True;\r
+    edOutputFile.Enabled := True;\r
+    HistoryChanged(edOutputFile, True);\r
+    sbSaveFile.Enabled := True;\r
+  end;\r
+  CheckInput;\r
+end;\r
+\r
+procedure TfrmMain.HistoryChanged(Box: TComboBox; Swap: Boolean);\r
+var\r
+  index: Integer;\r
+  item: string;\r
+begin\r
+  item := Trim(Box.Text);\r
+  if (item <> '') then\r
+  begin\r
+    index := Box.Items.IndexOf(item);\r
+    if (index < 0) then\r
+      Box.Items.Insert(0, item)\r
+    else\r
+      Box.Items.Move(index, 0);\r
+  end;\r
+  if (swap and (Box.Items.Count > 1)) then\r
+    Box.ItemIndex := 1;\r
+end;\r
+\r
+procedure TfrmMain.acDebugCreatePoExecute(Sender: TObject);\r
+var\r
+  l: TStringList;\r
+  i, j, len: Integer;\r
+  s: string;\r
+  f: TFileStream;\r
+begin\r
+  l := TStringList.Create;\r
+  try\r
+    FOpts.DebugGetHints(l);\r
+    f := TFileStream.Create('options\options.inc', fmCreate);\r
+    try\r
+      s := '{gnugetext: scan-all text-domain=''options''}'#13#10#13#10;\r
+      f.Write(PChar(s)^, Length(s));\r
+      s := 'const'#13#10;\r
+      f.Write(PChar(s)^, Length(s));\r
+\r
+      for i := 0 to l.Count - 1 do\r
+      begin\r
+        s := l.Strings[i];\r
+        len := Length(s);\r
+        for j := len downto 1 do\r
+        begin\r
+          if (s[j] = '''') then\r
+          begin\r
+            Insert('''', s, j);\r
+          end;\r
+        end;\r
+        s := Format('resourcestring option_%d=''%s'';'#13#10, [i, s]);\r
+        f.Write(PChar(s)^, Length(s));\r
+      end;\r
+\r
+      s := #13#10'{gnugettext: reset }'#13#10;\r
+      f.Write(PChar(s)^, Length(s));\r
+    finally\r
+      f.Free;\r
+    end;\r
+  finally\r
+    l.Free;\r
+  end;\r
+end;\r
+\r
+procedure TfrmMain.acFileChangeLanguageExecute(Sender: TObject);\r
+var\r
+  i: Integer;\r
+  s: string;\r
+begin\r
+  for i := 0 to FLang.Count - 1 do\r
+  begin\r
+    s := FLang.Strings[i];\r
+    if (s = '') then\r
+      Halt(1);\r
+  end;\r
+end;\r
+\r
 end.\r
\ No newline at end of file
index efc9d171fc4eb6f0275067f2a29548a688a31f40..3036ad2a07926f655b66e75feb1d84e4a9a5c2e1 100644 (file)
Binary files a/gpsbabel/win32/gui-2/readme.dfm and b/gpsbabel/win32/gui-2/readme.dfm differ
index d4b1a6b504476e11882a7bc8b9d22874f47db315..30ff0db244c2d652c5674cc859edede3e191345e 100644 (file)
@@ -21,16 +21,19 @@ unit readme;
 interface\r
 \r
 uses\r
+  gnugettextDx,\r
   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,\r
   ExtCtrls, StdCtrls, Buttons;\r
 \r
 type\r
   TfrmReadme = class(TForm)\r
     Memo: TMemo;\r
-    Panel1: TPanel;\r
-    BitBtn1: TBitBtn;\r
+    pnBottom: TPanel;\r
+    btnOK: TBitBtn;\r
     procedure FormDestroy(Sender: TObject);\r
     procedure FormCreate(Sender: TObject);\r
+    procedure FormKeyDown(Sender: TObject; var Key: Word;\r
+      Shift: TShiftState);\r
   private\r
     { Private declarations }\r
     FStr: TStream;\r
@@ -52,6 +55,7 @@ end;
 \r
 procedure TfrmReadme.FormCreate(Sender: TObject);\r
 begin\r
+  btnOK.Left := pnBottom.Width - btnOK.Width - 8;\r
   try\r
     FStr := TFileStream.Create('README', fmOpenRead);\r
     Memo.Lines.LoadFromStream(FStr);\r
@@ -60,4 +64,11 @@ begin
   end;\r
 end;\r
 \r
+procedure TfrmReadme.FormKeyDown(Sender: TObject; var Key: Word;\r
+  Shift: TShiftState);\r
+begin\r
+  if (Key = 27) then\r
+    ModalResult := mrOK;\r
+end;\r
+\r
 end.\r
index f9e44cbce7e4ed39d7fc838e5293f81037c8157c..d3de3257293282b2c4c49f1ad42e2a21e7463994 100644 (file)
@@ -25,24 +25,27 @@ unit utils;
 interface\r
 \r
 uses\r
-  gnugettextD4,\r
-  Windows, SysUtils, Classes, Registry;\r
+  gnugettext,\r
+  Windows, SysUtils, Classes, Registry, ShellAPI;\r
 \r
 type\r
   PBoolean = ^Boolean;\r
 \r
 function gpsbabel(const CommandLine: string; Output: TStrings;\r
-  Fatal: PBoolean = nil): Boolean;\r
+  Fatal: PBoolean = nil; OEMStrings: Boolean = True): Boolean;\r
 \r
 function GetShortName(const PathName: string): string;\r
 procedure StoreProfile(const Tag: Integer; const Value: string);\r
-function ReadProfile(const Tag: Integer): string;\r
+function ReadProfile(const Tag: Integer; const Default: string = ''): string; overload;\r
+function ReadProfile(const Name: string; const Default: string = ''): string; overload;\r
 \r
 function BackupProperties(Instance: TObject; Properties: TStrings; Backup: TStringList): Boolean;\r
 procedure RestoreProperties(Instance: TObject; Backup: TStringList);\r
 \r
 procedure FixStaticText(AComponent: TComponent);\r
 \r
+procedure WinOpenFile(const Name: string);\r
+\r
 implementation\r
 \r
 uses\r
@@ -60,7 +63,13 @@ begin
 end;\r
 \r
 function gpsbabel(const CommandLine: string; Output: TStrings;\r
-  Fatal: PBoolean = nil): Boolean;\r
+  Fatal: PBoolean; OEMStrings: Boolean): Boolean;\r
+\r
+// bigger buffer_size speeds up conversion to screen\r
+\r
+const\r
+  BUFFER_SIZE = $20000;\r
+\r
 var\r
   hRead, hWrite: THandle;\r
   ProcessInfo: TProcessInformation;\r
@@ -69,22 +78,33 @@ var
   sCmd: string;\r
 \r
   BytesRead, BytesDone: DWORD;\r
-  buffer: packed array[0..512] of Char;\r
+  buffer_string: string;\r
+  buffer: PChar;\r
   Error: DWORD;\r
   Wait_Result: DWORD;\r
   s: string;\r
 \r
 begin\r
   Result := False;\r
+\r
+  // strings are released automatical\r
+  // so we don't need a try/finally construct for our read buffer\r
+\r
+  SetLength(buffer_string, BUFFER_SIZE);\r
+  buffer := PChar(buffer_string);\r
+\r
   if (Fatal <> nil) then Fatal^ := False;\r
 \r
-  sCmd := SysUtils.Format('%s %s ', [gpsbabel_exe, CommandLine]);\r
+  if (Copy(CommandLine, 1, 1) = '~') then\r
+    sCmd := System.Copy(CommandLine, 2, Length(CommandLine) - 1)\r
+  else\r
+    sCmd := SysUtils.Format('%s %s ', [gpsbabel_exe, CommandLine]);\r
 \r
-  SecurityAttr.nLength := sizeof (TSECURITYATTRIBUTES);\r
+  SecurityAttr.nLength := sizeof(TSECURITYATTRIBUTES);\r
   SecurityAttr.bInheritHandle := true;\r
   SecurityAttr.lpSecurityDescriptor := nil;\r
 \r
-  if not CreatePipe(hRead, hWrite, @SecurityAttr, 0) then\r
+  if not CreatePipe(hRead, hWrite, @SecurityAttr, $8000) then\r
     raise eGPSBabelError.Create(_('Error WINAPI: Could not create "NamedPipe"!'));\r
 \r
   try\r
@@ -115,16 +135,21 @@ begin
     s := '';\r
 \r
     repeat\r
-      Wait_Result := WaitforSingleObject(ProcessInfo.hProcess, 50);\r
+      Wait_Result := WaitforSingleObject(ProcessInfo.hProcess, 10);\r
       if PeekNamedPipe(hRead, nil, 0, nil, @BytesRead, nil) then\r
       begin\r
-        Application.ProcessMessages;\r
+        if (BytesRead > 0) then Application.ProcessMessages;\r
         while (BytesRead > 0) do\r
         begin\r
-          ReadFile(hRead, Buffer, SizeOf(buffer)-1, BytesDone, nil);\r
-          buffer[BytesDone] := #0;\r
-          s := s + string(buffer);\r
-          Dec(BytesRead, BytesDone);\r
+          ReadFile(hRead, buffer^, BUFFER_SIZE - 1, BytesDone, nil);\r
+          if (BytesDone > 0) then\r
+          begin\r
+            buffer[BytesDone] := #0;\r
+            if OEMStrings then\r
+              OemToCharBuff(buffer, buffer, BytesDone);\r
+            s := s + string(buffer);\r
+            Dec(BytesRead, BytesDone);\r
+          end;\r
         end;\r
       end;\r
     until (Wait_Result = WAIT_OBJECT_0);\r
@@ -167,24 +192,28 @@ begin
   end;\r
 end;\r
 \r
-function ReadProfile(const Tag: Integer): string;\r
+function ReadProfile(const Tag: Integer; const Default: string): string; // overload;\r
 var\r
-  reg: TRegistry;\r
   str: string;\r
 begin\r
   if (Tag <= 0) or (Tag > High(Profile)) then Exit;\r
-\r
   str := Profile[Tag];\r
+  Result := ReadProfile(str, Default);\r
+end;\r
 \r
+function ReadProfile(const Name: string; const Default: string = ''): string; // overload;\r
+var\r
+  reg: TRegistry;\r
+begin\r
   reg := TRegistry.Create;\r
   try\r
     reg.RootKey := HKEY_CURRENT_USER;\r
     if reg.OpenKey('\SOFTWARE\GPSBabel', True) then\r
     begin\r
       try\r
-        Result := reg.ReadString(str);\r
+        Result := reg.ReadString(Name);\r
       except\r
-        Result := '';\r
+        Result := Default;\r
       end;\r
     end;\r
   finally\r
@@ -192,7 +221,6 @@ begin
   end;\r
 end;\r
 \r
-\r
 function BackupProperties(Instance: TObject; Properties: TStrings; Backup: TStringList): Boolean;\r
 var\r
   List: TStringList;\r
@@ -233,4 +261,9 @@ begin
   end;\r
 end;\r
 \r
+procedure WinOpenFile(const Name: string);\r
+begin\r
+  ShellExecute(0, 'open', PChar(Name), nil, '', 0);\r
+end;\r
+\r
 end.\r